博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AA.Dapper升级了
阅读量:4033 次
发布时间:2019-05-24

本文共 2253 字,大约阅读时间需要 7 分钟。

AA.Dapper如何使用

AA.Dapper基于dapper进一步封装而成的orm框架,提供增删改查、分页、事务、原生sql的功能,以满足日常的业务开发。

1.Repository层:

DapperRepository类包含大部分数据库操作如图: 

DapperContext.Current.DataBase类支持原生sql,Execute(执行非查询命令对象的sql并返回受影响的行数)、ExecuteScalar(返回select结果集中的第一行第一列)、Query(执行查询sql,并返回结果) 

定义仓储类并且继承DapperRepository,如以下代码 

public class UserRoleRepository:DapperRepository
, IUserRoleRepository { }

如果有需要原生sql的需求,在IUserRepository接口中添加定义

int GetUserCount();

在UserRepository中实现

  

public class UserRepository : DapperRepository<User>, IUserRepository  

    {  

  

        public int GetUserCount()  

        {  

            return DapperContext.Current.DataBase.ExecuteScalar<int>

("select count(*) from Sys_UserInfo");  

        }  

}  

 

2.ApplicationServce层

(1)新增

_userRepository.Insert(entityUser);  

(2)修改

var entity = _userRepository.Get(input.SysNo);  

entity.Status = 320;  

_userRepository.Update(entity);  

 

(3)删除

 var entity = _userRepository.Get(input.SysNo);  

_userRepository.Delete(entity);  

 

(4)查询

//通过主键获取单个实体  

_userRepository.Get(input.SysNo);  

  

//通过Expression条件获取  

_userRepository.Select(x => x.SysNo == input.SysNo);  

  

//分页  

var result = _userRepository.From(sql =>  

            {  

                sql.Select()  

                   .Where(x=>x.UserName==input.UserName)  

                   .Page(input.PageIndex, input.PageSize);  

            });  

 

(5)事务

using (var dbTransaction = dapperContext.BeginTransaction())  

 {  

     try  

     {  

         var user = new UserInfo()  

         {  

             UserName = "chengTian",  

             RealName = "成天",  

             GmtCreate = DateTime.Now,  

             GmtModified = DateTime.Now,  

             LastLoginDate = DateTime.Now  

         };  

         userInfoRepository.Insert(user);  

         userAlbumRepository.Insert(new UserAlbum  

         {  

             Pic = "image/one.jgp"  

         });  

         dapperContext.Commit();  

  

     }  

     catch (Exception ex)  

     {  

         dbTransaction.Rollback();  

     }  

 }  

 

(6)动态Expression

删除、查询条件需要根据传入的参数判断使用DynamicWhereExpression动态构造Expression 如一下代码

var where = DynamicWhereExpression.Init<User>();  

if (input.RealName != "")  

{  

   where = where.And(x => x.RealName.Contains(input.RealName));  

}  

if (input.SysNo!=Guid.Empty)   

{  

    where = where.And(x=>x.SysNo==input.SysNo);  

}  

if (input.SysNos.Any())   

{  

    where = where.And(x=>input.SysNos.Contains(x.SysNo));  

}  

var result = _userRepository.From(sql =>  

{  

    sql.Select()  

       .Where(where)  

       .Page(input.PageIndex, input.PageSize);  

});  

https://github.com/ChengLab/AAFrameWork

源码地址

用起来还是很顺手的,目前比较成熟也很多,不过AA.Dapper不是全新的轮子,只是进一步的封装,有了Ef的便捷性。你可以hold住的orm,代码可以任意扩展,只要你熟悉dapper。喜欢.NetCore的童鞋们,可以加微信群,加微信(备注加群):qinzhong45。

转载地址:http://wdkdi.baihongyu.com/

你可能感兴趣的文章
jQuery实现的进度条效果
查看>>
jQuery常用小技巧
查看>>
【Spring官方指南学习】Spring构建一个 restful web service
查看>>
java中native的用法
查看>>
Java --- 堆(heap)栈(stack)和方法区(method)
查看>>
java char类型可以存储一个汉字
查看>>
Java实现克隆的三种方式
查看>>
Oracle中的BLOB和CLOB字段
查看>>
Servlet与CGI的区别
查看>>
Synchronized和Lock的用法和区别
查看>>
快速失败(fail—fast)和 安全失败(fail—safe)
查看>>
JDK提供的四种线程池
查看>>
TCP和UDP的区别
查看>>
Java new关键字和newInstance()方法的区别
查看>>
关于TCP粘包,拆包及解决方法
查看>>
网站分析之 --- PV、UV、IP、VV
查看>>
【分布式存储】CAP、BASE与ACID原则
查看>>
Mybatis if test中字符串比较
查看>>
【基础篇】Java常见的runtime exception
查看>>
ehcache、memcache、redis三大缓存比较
查看>>