IBatis.net初步使用
2015-07-19 11:07
169 查看
最近加班比较忙,时间也比较琐碎,蛮久没有写东西了。这次就总结一下自己使用IBatis.net的一些总结吧。
官方网站:http://www.mybatis.org/
项目下载地址:http://code.google.com/p/mybatisnet/
2)、配置文件的初始化:
初始化一个Dal'操作基类:
3)、实体Orm操作实现:
一、创建实体类,包含实体对应字段的定义(略)
二、创建对应的Xml映射文件,例子如下
分解:
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[]]>类似于@“”,将语句标识为不转义。
附上部分帮助文件,例子代码就不上传了,因为是在实现的部分很简单也没有明确的测过。
Mapper提示文件
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提示文件
相关文章推荐
- mysql在存储过程中从结果集给多个参数赋值的办法
- [LeetCode][Java] Largest Rectangle in Histogram
- codevs1042
- android自定义button样式
- 转:抗锯齿方法两种(其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true))
- 将博客搬至CSDN
- 算法の快速排序
- leetcode:Reverse Bits
- Android 四大组件学习之Activity三
- php实现单链表
- 输出一个字符串的所有自字符串(不重复)
- vim设置(非常全面),即.vimrc文件的配置
- BZOJ 3438: 小M的作物( 最小割 )
- Git Push 避免用户名和密码方法
- 直接插入排序
- java中 快捷键输入System.out.println();
- MPI 学习
- Linking different libraries for Debug and Release builds in Cmake on windows?
- hdu1159
- SG 函数 S-Nim