zoukankan      html  css  js  c++  java
  • 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 = @"ConfigFileSqlMap.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提示文件

    Top
    收藏
    关注
    评论
  • 相关阅读:
    Atitit 经济学常见的流派 古典主义与凯恩斯主义
    Atitit 学习方法 体系化学习方法 Excel 科目,分类,专业 三级分类。。 知识点。。 课程就是每一个知识点的详细化。。 比如经济学 类别 专业 xx概论知识点 3、金
    atiitt it学科体系化 体系树与知识点概念大总结.xlsx
    Atitit 减少财政支出普通人如何蹭政府补贴措施 attilax大总结.docx
    Atitit 信用管理概论 attilax学习心得
    Atitit.月度计划日程表 每月流程表v5
    Atitit 企业6大职能 attilax总结
    Atitit 常见每日流程日程日常工作.docx v8 ver ampm imp 签到 am y 天气情况检查 am y 晨会,每天或者隔天 am 每日计划(项目计划,日计划等。 am
    Atitit 财政赤字解决方案
    Atitit 建设自己的财政体系 attilax总结 1.1. 收入理论 2 1.2. 收入分类 2 1.3. 2 1.4. 非货币收入 2 1.5. 2 1.6. 降低期望 2 1.7.
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4658350.html
Copyright © 2011-2022 走看看