最近加班比较忙,时间也比较琐碎,蛮久没有写东西了。这次就总结一下自己使用IBatis.net的一些总结吧。
IBatis简介
IBatis.net是一款开源的Orm框架,应该算是从java的IBatis项目演化而来的基于C#的Orm框架。
官方网站:
项目下载地址:
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; ////// /// /// 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'操作基类:
////// Dal抽象基类 /// ///public abstract class BaseDal where T : class { protected ISqlMapper sqlMapper = null; public BaseDal() { sqlMapper = HisMapper.SqlMapper; } public BaseDal(string configFile) { MyMapper.DbMapperFile = configFile; sqlMapper = MyMapper.SqlMapper; } /// /// 新增,底层默认返回Object /// /// /// ///public object Add(string statement, object parameters) { return sqlMapper.Insert(statement, parameters); } /// /// 删除 /// /// /// ///public int Delete(string statement, object parameters) { return sqlMapper.Delete(statement, parameters); } /// /// 更新 /// /// /// ///public int Update(string statement, object parameters) { return sqlMapper.Update(statement, parameters); } /// /// 查询返回集合 /// /// /// ///public IList QueryForList(string statement, object parameters) { return sqlMapper.QueryForList (statement, parameters); } /// /// 查询返回对象 /// /// /// ///public object QueryForObj(string statement, object parameters) { return sqlMapper.QueryForObject(statement, parameters); } }
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[]]>类似于@“”,将语句标识为不转义。
总结
用Ibatis有一段时间了,基于sql编写的实现感觉上还是不错的。
附上部分帮助文件,例子代码就不上传了,因为是在实现的部分很简单也没有明确的测过。