• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
老杨随笔-重用与重构的艺术
专注于RIA架构设计,无止境的重构,无限制的重用
博客园    首页    新随笔    联系   管理    订阅  订阅

Dappers 开发入门(1) - 接口

半年前已经对Dapper (StackOverflow.com使用的Micro-OM框架)进行了简单的包装。 结合目前的开发框架,目前已经完成了 Activiti5.9 (www.activiti.org) 流程引擎的.NET 迁移,同时在公司项目中也进行了深入的实践。陆续会推出完整的框架体系介绍。

目前, Dappers = Dapper + myBatis

  • Mapping元数据描述

    [System.Data.Linq.Mapping.Table(Name="SYS_PROPERTY")] 

    public class SysProperty : PersistentObject 
    { 
        [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] 

        public ActionResult Edit(SysOffice o) 
        { 
            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 SelectList(string mapSql, object param);

List  SelectList(QueryInfo info);

QueryInfo Select(QueryInfo info);

 

 

//返回所有Office对象: 根据SysOffice元数据定义,自动创建并缓存该Select 语句
        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);

 

 

//根据SysUser自动创建select语句,并提供UserCode匹配查询
        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与组装, 请见下一篇。

posted @ 2012-04-09 10:46  craboYang  阅读(2928)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3