IBatis.net 사용 집계

8626 단어 ibatis
요즘 잔업 이 바 쁘 고 시간 도 자질구레 해서 오랫동안 글 을 쓰 지 못 했 습 니 다.이번 에는 IBatis.net 을 사용 한 총 결 을 정리 해 보 자.
IBatis 소개
IBatis.net 는 오픈 소스 의 Orm 프레임 워 크 로 자바 의 IBatis 프로젝트 에서 진 화 된 C\#기반 Orm 프레임 워 크 라 고 할 수 있 습 니 다.
공식 홈 페이지:http://www.mybatis.org/
프로젝트 다운로드 주소:http://code.google.com/p/mybatisnet/
IBatis 사용
1),프로필:providers.config-데이터베이스 공급 자의 프로필 은 주로 사용 하 는 데이터베이스 형식 을 설정 하 는 데 사 용 됩 니 다.SqlMap.config:입구 파일 을 설정 하고 가리 키 는 데이터 공급 자 파일 과 각종 sql 맵 파일 을 설정 합 니 다.설정 파일 이름 은 스스로 설정 할 수 있 습 니 다(SqlMap.Config 는 기본 설정 파일 이름 입 니 다).
2)、설정 파일 의 초기 화:
public class MyMapper

    {

        public static string DbMapperFile = @"ConfigFile\SqlMap.config"; ///     

        private static object mLock = new object();



        private static volatile ISqlMapper _mapper = null;

        /// <summary>    

        ///     

        /// </summary>    

        /// <param name="obj"></param>    

        public static void Configure(object obj)

        {

            _mapper = null;

        }



        public static ISqlMapper SqlMapper

        {

            get

            {

                if (_mapper == null)

                {

                    lock (mLock)

                    {

                        if (_mapper == null)

                        {

                            ConfigureHandler handler = new ConfigureHandler(Configure);

                            DomSqlMapBuilder builder = new DomSqlMapBuilder();

                            _mapper = builder.ConfigureAndWatch(DbMapperFile, handler);    //      ,   :builder.Configure();

                        }

                    }

                }

                return _mapper;

            }

        }

    }    


Dal'작업 기본 클래스 초기 화:
/// <summary>

    /// Dal    

    /// </summary>

    /// <typeparam name="T"></typeparam>

    public abstract class BaseDal<T> where T : class

    {

        protected ISqlMapper sqlMapper = null;

        public BaseDal()

        {

            sqlMapper = HisMapper.SqlMapper;



        }

        public BaseDal(string configFile)

        {

            MyMapper.DbMapperFile = configFile;

            sqlMapper = MyMapper.SqlMapper;

        }

        /// <summary>

        ///   ,      Object

        /// </summary>

        /// <param name="statement"></param>

        /// <param name="parameters"></param>

        /// <returns></returns>

        public object Add(string statement, object parameters)

        {

            return sqlMapper.Insert(statement, parameters);

        }

        /// <summary>

        ///   

        /// </summary>

        /// <param name="statement"></param>

        /// <param name="parameters"></param>

        /// <returns></returns>

        public int Delete(string statement, object parameters)

        {

            return sqlMapper.Delete(statement, parameters);

        }

        /// <summary>

        ///   

        /// </summary>

        /// <param name="statement"></param>

        /// <param name="parameters"></param>

        /// <returns></returns>

        public int Update(string statement, object parameters)

        {

            return sqlMapper.Update(statement, parameters);

        }

        /// <summary>

        ///       

        /// </summary>

        /// <param name="statement"></param>

        /// <param name="parameters"></param>

        /// <returns></returns>

        public IList<T> QueryForList(string statement, object parameters)

        {

            return sqlMapper.QueryForList<T>(statement, parameters);

        }

        /// <summary>

        ///       

        /// </summary>

        /// <param name="statement"></param>

        /// <param name="parameters"></param>

        /// <returns></returns>

        public object QueryForObj(string statement, object parameters)

        {

            return sqlMapper.QueryForObject(statement, parameters);

        }

    }


3)、실체 Orm 조작 실현:
1.실체 클래스 를 만 들 고 실체 대응 필드 의 정 의 를 포함 합 니 다(약)
2.대응 하 는 Xml 맵 파일 을 만 듭 니 다.예 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8" ?>

<sqlMap namespace="MyBatis3Sample.Model" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <alias>

    <typeAlias alias="Customer" type="MySample.Model.Customer, MySample.Model" />

  </alias>



  <!--Mapping Class To Sql Realation Teable-->

  <resultMaps>

    <resultMap id="CustomerResult" class="Customer">

      <result property="CustomerId" column="CustomerId"/>

      <result property="FirstName" column="FirstName"/>

      <result property="LastName" column="LastName"/>

    </resultMap>

  </resultMaps>



  <!--Mapping The SQl StateMent about CRUD chenkai-->

  <statements>

    <insert id="New_Customer"  parameterClass="Customer">

    <![CDATA[INSERT INTO  tbCustomer

      ( FirstName ,

      LastName 

      )

      VALUES  ( #FirstName# , #LastName# )]]>

    </insert>

    <update id="Update_CustomerById">

      <![CDATA[

    update tbCustomer  set FirstName=#FirstName#,SecondName=#SecondName#

    where CustomerId=#CustomerId#

    ]]>

    </update>

  <select id ="Select_All_Customer" resultMap="CustomerResult">

    <![CDATA[

    select CustomerId,FirstName,LastName from tbCustomer

    ]]>

  </select>

  <select id="Select_CustomerById" extends="Select_All_Customer" resultMap="CustomerResult">

    <![CDATA[

    where CustomerId=#CustomerId#

    ]]>

  </select>

    <select id="Select_CustomerByNamePrefix" extends="Select_All_Customer" resultMap="CustomerResult">

    <dynamic prepend=" where ">

      <isNotEmpty prepend =" and ">

        FirstName like '$FirstNamePrefix$%'

      </isNotEmpty>

    <isNotEmpty prepend =" and ">

        LastName like '$LastNamePrefix$%'

      </isNotEmpty>

    </dynamic>

  </select>

    

  <select id="Select_CustomerTotalCount"  resultClass="int">

    <![CDATA[

   select count(CustomerId) from tbCustomer

    ]]>

  </select>

  </statements>

</sqlMap>


분해:
a.는 여러 개의 resultmap-필드 를 포함 하여 맵 관 계 를 설정 하고 찾 은 필드 를 해당 하 는 클래스 의 대응 필드 에 표시 합 니 다.
b.는 여러 개의 statement-Sql 문 구 를 포함 할 수 있 습 니 다.대체적으로 select,insert,update,delete 이 고 다른 것 은 깊이 연구 하지 않 았 습 니 다.
c."\#First Name\#"에서 First Name 은 전달 하 는 매개 변수 입 니 다.IBatis 는 그 유형 을 자동 으로 해석 합 니 다."$First Name Prefix$%"는 모호 한 조회 시 매개 변 수 를 작성 하 는 방식 이 고 매개 변 수 를 연결 하 는 방식 으로 도 이 루어 집 니 다.매개 변 수 는 전달 할 때 대소 문자 가 민감 하 므 로 주의해 야 합 니 다.
d.의 동적 sql 실현 에 주의 하 십시오.주로 쓰기 입 니 다.
e.각 statement 의 Id 는 하나 여야 합 니 다.중복 이 있어 서 는 안 됩 니 다.같은 항목 의 다른 xml 설정 에서 도 현재 statement 의 Id 와 일치 하 는 statement 이 존재 해 서 는 안 됩 니 다.그렇지 않 으 면 오 류 를 보고 할 수 있 습 니 다.ibatis 에서 설정 읽 기 를 할 때 각 statement 을 불 러 옵 니 다.statement 의 id 는 1 이 어야 합 니 다.
f.statement 에서 resultMap 과 resultClass 의 차 이 를 설정 합 니 다.resultMap 과 resultClass 를 설정 하지 않 으 면 기본적으로 object 형식 으로 돌아 갑 니 다.resultMap 은 일반적으로 대응 하 는 맵 설정 에 설정 합 니 다.resultClass 는 일반적으로 지정 한 형식,예 를 들 어 string/object 등 을 가리 키 는 데 사 용 됩 니 다.
g、 는@과 유사 합 니 다."문 구 를 전의 하지 않 음 으로 표시 합 니 다.
 
총결산
 
Ibatis 를 사용 한 지 오래 되 었 습 니 다.sql 기반 으로 작 성 된 실현 감 이 좋 습 니 다.
일부 도움말 파일 을 첨부 하면 예 코드 는 업로드 되 지 않 습 니 다.실현 되 는 부분 이 간단 하고 명확 하 게 측정 되 지 않 았 기 때 문 입 니 다.
Mapper 프롬프트 파일
 

좋은 웹페이지 즐겨찾기