IBatis.net使用汇总

最近加班比较忙,时间也比较琐碎,蛮久没有写东西了。这次就总结一下自己使用IBatis.net的一些总结吧。

IBatis简介

IBatis.net是一款开源的Orm框架,应该算是从java的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操作实现:

一、创建实体类,包含实体对应字段的定义(略)

二、创建对应的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、<resultMaps>可包含多个resultmap---字段配置映射关系,将查出的字段映射到对应的类的对应字段

b、<statements>可包含多个statement---配置Sql语句,大致为select、insert 、update、delete,其他的没有太过深究。

c、“#FirstName#”其中FirstName为传递的参数,IBatis会自动解析其类型,“'$FirstNamePrefix$%'” 为模糊查询时参数的编写方式,也可以通过参数拼接的方式实现。参数在传递时大小写敏感,这点要注意

d、注意<dymanic>的动态sql实现,主要是写法。

e、每个statement的Id必须为一,不可存在重复,即使是在同一项目的其他的xml配置中也不可存在和当前statement的Id一致的statement,否则会报错。因为在ibatis进行配置读取时,会将各个statement加载,要求statement的id必须为一

f、statement中配置resultMap和resultClass的区别,如果不配置resultMap和resultClass会默认返回object类型,resultMap一般是用于配置到对应的映射配置;resultClass一般用于指向指定的类型,例如string/object等。

g、 <![CDATA[]]>类似于@“”,将语句标识为不转义。

 

总结

 

用Ibatis有一段时间了,基于sql编写的实现感觉上还是不错的。

附上部分帮助文件,例子代码就不上传了,因为是在实现的部分很简单也没有明确的测过。

Mapper提示文件

 

你可能感兴趣的:(ibatis)