之前做了一个项目,项目中使用了IBatis for .net框架,感觉IBatis使用起来还是比较方便,且较之NHibernate配置比较简单,属于轻量级ORM框架。最近又有一个项目需要开动,我琢磨着还是使用IBatis吧,毕竟前面项目使用过,大家都比较熟悉,而且构建起来也比较方便。但是在构建的时候,感觉在做重复劳动,每个实体都有增删改查几个共用的操作,写完这些也需要不少时间,而且无意义,最多只能增加对IBatis使用熟练度,相对于花下去的成本还是不值得的。百度、google想找一些封装好的通用类,类似于NHibernate的IBaseDao,然而并没有找到合适的。那只能自己动手写了,参考了NHibernate的IBaseDao封装,主要封装了以下几个方法(添加一个实体,添加多个实体,删除一个实体,删除多个实体,修改一个实体,获取一个实体,获取所有实体,分页,分页排序查询)。
IBaseDao接口
/// <summary>
/// 基础操作
/// </summary>
/// <typeparam name="TEntity">实体对象</typeparam>
/// <typeparam name="TPk">主键类型</typeparam>
public interface IBaseDao<TEntity, TPk>
{
/// <summary>
/// 添加一个实体,返回主键
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
TPk Add(TEntity entity);
/// <summary>
/// 添加多个实体,返回主键列表
/// </summary>
/// <param name="entities"></param>
/// <returns></returns>
IList<TPk> Add(IEnumerable<TEntity> entities);
/// <summary>
/// 通过主键删除实体
/// </summary>
/// <param name="id"></param>
void Delete(TPk id);
/// <summary>
/// 通过id集合删除实体
/// </summary>
/// <param name="ids"></param>
void Delete(IEnumerable<TPk> ids);
/// <summary>
/// 更新实体,为null则不操作
/// </summary>
/// <param name="entity"></param>
void Update(TEntity entity);
/// <summary>
/// 通过主键获取实体
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
TEntity Get(TPk id);
/// <summary>
/// 通过主键获取实体
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
IList<TEntity> Get(IEnumerable<TPk> ids);
/// <summary>
/// 获取所有实体
/// </summary>
/// <returns></returns>
IList<TEntity> GetAll();
/// <summary>
/// 分页
/// </summary>
/// <typeparam name="TSearchSortCriteria"></typeparam>
/// <param name="currentPage"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
PageData<TEntity> GetPageDate<TSearchSortCriteria>(int currentPage, int pageSize) where TSearchSortCriteria : SearchSortPageEntity, new();
/// <summary>
/// 分页查询排序
/// </summary>
/// <typeparam name="TSearchSortCriteria"></typeparam>
/// <param name="currentPage"></param>
/// <param name="pageSize"></param>
/// <param name="searchSortCriteria"></param>
/// <returns></returns>
PageData<TEntity> GetPageDate<TSearchSortCriteria>(int currentPage, int pageSize, TSearchSortCriteria searchSortCriteria) where TSearchSortCriteria : SearchSortPageEntity, new();
}
IBaseDao的实现
public class BaseDao<TEntity, TPk> : IBaseDao<TEntity, TPk>
{
public ISqlMapper RealMapper = Mapper.GetMaper;
private readonly string _className = typeof(TEntity).Name;
public TPk Add(TEntity entity)
{
string command = "Add" + _className;
var obj = RealMapper.Insert(command, entity);
return (TPk)obj;
}