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提示文件

时间: 2024-08-28 19:57:10

IBatis.net使用汇总的相关文章

ibatis错误汇总

1) 错误:The prefix "context" for element "context:property-placeholder" is not bound. 解决:在文件头中引入:xmlns:context="http://www.springframework.org/schema/context" 即可. 正解例子: <beans xmlns="http://www.springframework.org/schem

org.apache.ibatis.binding.BindingException【原因汇总】

背景:Spring整合Mybatis 报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解释:就是说,你的Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql: 这里的Spring注入后的意思是,你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用.这里的可能发生的情况有如下几种: 接口已

hibernate 查询方式汇总

主要摘自  http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html ,http://blog.csdn.net/xingtianyiyun/article/details/7703429 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种.但是细分可以有如下几种: 一.HQL查询方式     这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来

158个JAVA免豆精品资料汇总

附件完整版下载地址: http://down.51cto.com/data/431561 附件部分预览~ java中国移动收费系统[源代码] http://down.51cto.com/data/70784 java开发必备的日志文件开发包[工具] http://down.51cto.com/data/135698 JS代码自动排版工具 http://down.51cto.com/data/55013 <疯狂Ajax讲义>作者李刚 http://down.51cto.com/data/1317

Hibernate学习汇总

一.Hibernate的基本原理 1.什么是Hibernate Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了.其实对于对象来说就是持久化. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的

【转】【JAVA资料免费下载】158个JAVA免豆精品资料汇总——下载目录

附件完整版下载地址: http://down.51cto.com/data/431561 附件部分预览~ java中国移动收费系统[源代码] http://down.51cto.com/data/70784 java开发必备的日志文件开发包[工具] http://down.51cto.com/data/135698 JS代码自动排版工具 http://down.51cto.com/data/55013 <疯狂Ajax讲义>作者李刚 http://down.51cto.com/data/1317

常见Struts、Hibernate、Spring、J2EE、ibatis、Oracle等开发框架架构图及其简介

各种系统架构图及其简介 转载请保留出处,不胜人生一场醉汇总. 以下文字和架构图均在本人相关系统设计和架构方案中有所应用. 原文出处:http://space.itpub.net/6517/viewspace-609654 1.Spring架构图 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能

C#开源系统大汇总(个人收藏)

C#开源系统大汇总 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率. NKalore是一款编程语言,它扩展了C#允许在.net平台使用AOP.NKalore的语法简单.直观,它的编译器是基于Mono C#编译器(MCS).NKalore目前只能在命令行或#Develop内部使用.

阿里巴巴JAVA常考面试题及汇总答案

一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答:   1.String是字符串常量,StringBuffer和StringBuilder都是字符串变量.后两者的字符内容可变,而前者创建后内容不可变. 2.String不可变是因为在JDK中String类被声明为一个final类. 3.StringBuffer是线程安全的,而StringBuilder是非线程安全的. ps:线程安全会带来额外的系统开销,所以StringBu