半年前已经对Dapper (StackOverflow.com使用的Micro-OM框架)进行了简单的包装。 结合目前的开发框架,目前已经完成了 Activiti5.9 (www.activiti.org) 流程引擎的.NET 迁移,同时在公司项目中也进行了深入的实践。陆续会推出完整的框架体系介绍。
目前, Dappers = Dapper + myBatis
- Mapping元数据描述
[System.Data.Linq.Mapping.Table(Name="SYS_PROPERTY")]
{
[System.Data.Linq.Mapping.Column(Expression="Ignore")]
public override string Id
{
get{ return base.Id;}
set{base.Id = value;}
}
[System.Data.Linq.Mapping.Column(Name="Name",IsPrimaryKey=true)]
public string Name { get; set; }
public string Value { get; set; }
}
- 新增、修改、删除一个对象
[HttpPost]
{
if (base.IsDelete)
o.DeletedState=true;
svc.UpdateOrInsert(o);
return base.OpResult;
}
- 查询
1. 单一对象查找接口:
T SelectOne<T>(string mapSql, object param);
T SelectById<T>(string id);
object SelectById(Type type, string id);
public JsonResult Load(string id)
SysOffice obj = null;
if (!string.IsNullOrEmpty(id))
obj = dao.SelectById<SysOffice>(id);
return Json(obj);
}
2.结果集查找:
List
List
QueryInfo Select(QueryInfo info);
public ActionResult List(int? pPageSize, int? pPageIndex)
{
info = new QueryInfo(typeof(SysOffice));
info = dao.Select(info);
return View(info);
}
//找出所有的流程定义
QueryInfo info = new QueryInfo(typeof(ProcessDefinitionEntity));
info.CustomSQL = "selectProcessDefinitionsByQueryCriteria";
return Json(dao.Select(info));
此时“selectProcessDefinitionsByQueryCriteria”对应的就是类似myBatis的基于key-value的外部sql配置语句。
3.Linq式查找
IEnumerable<T> Select<T>(System.Linq.Expressions.Expression<Func<T, bool>> where);
IEnumerable<T> Select<T>(string mapSql, System.Linq.Expressions.Expression<Func<T, bool>> where);
public ContentResult GetUserName(string userCode)
{
if (!string.IsNullOrEmpty(userCode))
{
var obj = dao.Select<SysUser>(m => m.UserCode == userCode).SingleOrDefault();
if (obj != null)
return Content(obj.Name);
}
return Content(string.Empty);
}
//同理,可以额外提供mappingSql 的key, 从而在已有sql的基础上动态匹配、组装UserCode条件。
MappingSql与组装, 请见下一篇。