Dapper学习 - Dapper.Rainbow(三) - Read
前面已经介绍了新增/修改/删除了, 接下来介绍一下Rainbow的Read方法.
一、Read -- Rainbow原生
1. 先看测试代码
var conStr = ConfigurationManager.ConnectionStrings["Cons"].ToString();
using (var conn = new MySqlConnection(conStr))
{
var db = Rainbow.Init(conn, ); //Rainbow提供方法
var entity = db.Teacher.Get(); entity = db.Teacher.First(); var listAll = db.Teacher.All();
}
Rainbow在读取数据这一块, 就只提供了这几个方法, 当然, Dapper的方法, 在这里仍然是可以用的, 通过db.Query的方式就可以用了
2. 源码解析
/// <summary>
/// Grab a record with a particular Id from the DB
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T Get(TId id)
{
return database.Query<T>("select * from " + TableName + " where " + "Id" + " = @id", new { id }).FirstOrDefault();
} public virtual T First()
{
return database.Query<T>("select * from " + TableName + " LIMIT 1;").FirstOrDefault();
//return database.Query<T>("select top 1 * from " + TableName).FirstOrDefault();
} public IEnumerable<T> All()
{
return database.Query<T>("select * from " + TableName);
}
First方法需要作出修改, 以适应mysql. 不过First方法是虚方法, 在没有源码修改的情况下, 可以用类去继承重写就可以了, 也还是比较方便的.有源码的话, 更方便点
这里的几个封装都是非常简单的, 近乎于赤裸裸的sql了, 不在多说
二、自定义扩展
1. 测试代码:
var conStr = ConfigurationManager.ConnectionStrings["Cons"].ToString();
using (var conn = new MySqlConnection(conStr))
{
var db = Rainbow.Init(conn, ); //自定义扩展方法
var list = db.Teacher.GetListBy(" No>@No", new { No = }); var pageList = db.Teacher.GetPageList(, , " No>@No", new { No = });
}
经测试, 是可以正常使用的. 接下来看一下代码
2. 自定义方法
/// <summary>
/// 根据条件查询
/// </summary>
/// <param name="whereStr">不带where关键字</param>
/// <returns></returns>
public IEnumerable<T> GetListBy(string whereStr, dynamic param = null)
{
string sql = "select * from " + TableName;
if (!string.IsNullOrWhiteSpace(whereStr))
sql += " where " + whereStr; return database.Query<T>(sql, param);
}
此处的方法, 只适用于单表, 对于多表的查询, 可以直接使用Dapper的方法, 写sql.
/// <summary>
/// 分页方法
/// </summary>
/// <param name="pageIndex">当前页码</param>
/// <param name="pageSize">每页显示条数</param>
/// <param name="whereCondition">where条件</param>
/// <param name="param">where条件中的参数列表</param>
/// <param name="orderbyProperty">排序字段;如 name DESC 或者 id DESC,name ASC</param>
/// <returns></returns>
public virtual PagedResult<T> GetPageList(int pageIndex, int pageSize, string whereCondition = "",
dynamic param = null, string orderbyProperty = "")
{
if (pageIndex < ) pageIndex = ;
var startItem = (pageIndex - ) * pageSize; string where = string.IsNullOrEmpty(whereCondition) ? "" : " WHERE " + whereCondition;
string orderby = string.IsNullOrEmpty(orderbyProperty) ? "" : " ORDER BY " + orderbyProperty; string sql = string.Format(@"SELECT * FROM {0} {1} {2} LIMIT {3},{4}; SELECT COUNT(1) FROM {0} {1}",
TableName, where, orderby, startItem, pageSize); PagedResult<T> pagingResult = new PagedResult<T>(pageSize, pageIndex);
using (var result = database.QueryMultiple(sql, param))
{
List<T> list = result.Read<T>();
var totalCount = Convert.ToInt32(result.Read<long>()[]); pagingResult.Data = list;
pagingResult.TotalItemCount = totalCount;
}
return pagingResult;
}
这个就是单表的分页方法了, 如果想要多表的, 只需要稍微修改下这个方法, 就可以了. 就不贴了.
这里牵涉到一个QueryMultiple方法, 是之前Dapper解析篇幅里面没有提到的, 这个方法是分次查询, 如果sql语句是多个sql语句拼接而成, 那么就可以读取多次以获取多个查询结果
Dapper学习 - Dapper.Rainbow(三) - Read的更多相关文章
- Dapper学习 - Dapper.Rainbow(二) - Update/Delete
上一篇介绍了Rainbow的Create方法, 这里就来介绍一下Update方法吧, 毕竟新增和修改是双胞兄弟嘛. 一.Update 1. 测试代码: var conStr = Configurati ...
- Dapper学习 - Dapper.Rainbow(一) - Create
Dapper这个ORM有许多扩展, 我自己用过两种, 也算是比较主流的两种, Rainbow和Extension, 这里就先介绍下Rainbow吧, 毕竟这个先用, 当然, 由于我使用的是mysql数 ...
- Dapper学习 - Dapper的基本用法(三) - CUD
之前介绍了Dapper的查询, 存储过程, 函数的调用, 接下来要说一下Dapper的增删改, 其实Dapper的增删改, 都是同一种模式的. 我就不分开介绍了, 直接在一个例子上展现好了. var ...
- Dapper学习 - Dapper的基本用法(二) - 存储过程/函数
上一篇貌似少介绍了自定义函数和存储过程, 因为这两个也可以使用查询的方式来实现功能, 这一篇就补上 一.自定义函数的创建和调用 (mysql的) Delimiter $$ drop function ...
- Dapper学习 - Dapper的基本用法(一) - 查询
上一篇, 提到Query<Test>查询的时候, 如果Test中包含自定义class, Dapper不会给自定义class完成映射, 而是直接给null, 其实是可以实现的, 答案就在下面 ...
- Dapper学习(三)之其他用法
这里说的其他用法,是指 Async,Buffered,Transaction,Stored Procedure. 1. 首先 dapper支持异步 ExecuteAsync, QueryAsync, ...
- dapper 学习
上一篇, 提到Query<Test>查询的时候, 如果Test中包含自定义class, Dapper不会给自定义class完成映射, 而是直接给null, 其实是可以实现的, 答案就在下面 ...
- dapper 扩展插件: Rainbow
dapper 扩展插件: Rainbow dapper 是一个效率非常高的orm 框架 ,效率要远远大于 我们大微软的EF . 它只有一个类文件,非常之小. 1,首先下载dapper 这里下 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射
此特性需要安装Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,实体类层需要安装Kogel.Dapper.Extension 3.06及以上版本 目录 [LINQ2Dapper ...
随机推荐
- 整理BOM时写的关于拆分单元格的VB代码
Public Function AddRows(pos As Integer, amount As Integer) Dim rpos As Integer rpos = pos + To amoun ...
- ejs模板中的四种表达式输出形式
在ejs模板中,通常会用下面四种方式在HTML中输出服务端的变量或表达式的值: 1. 直接在<%%>中写表达式或变量.这种情况通常只是用来进行表达式计算或给变量赋值,不会有任何输出,被称作 ...
- netstat 1
lsof -i :8086 第二个参数需要:开头 netstat linux -a (all)显示所有选项,默认不显示LISTEN相关 理解这个很关键, 这是为什么我们netstat -a 不显 ...
- linux奇技淫巧 4
压缩解压 tar 即可压缩也可以解压 c 压缩 如果没有z.j参数,则表示,只打包,不压缩. 就说, t 查看 z 以gzip方式压缩 相当于 gzip ?.. j 以bzip方式压缩 bzip2 ? ...
- Java基础之如何解决斗地主问题
难的是逻辑的分析,把逻辑转化成代码是一种能力,这种能力需要多练习总结. 多多指教,共同进步. 问题: 要求实现斗地主游戏发牌过程,打印三个玩家的牌和底牌.在不看底牌的情况下,统计出三个 ...
- Java程序员的日常 —— Java类加载中的顺序
之前说过Java中类的加载顺序,这次看完继承部分,就结合继承再来说说类的加载顺序. 继承的加载顺序 由于static块会在首次加载类的时候执行,因此下面的例子就是用static块来测试类的加载顺序. ...
- ASP.net的文件扩展名
尽管ASP.NET中采用的是事件响应模式,使程序开发人员和最终用户感觉与WinForm程序非常接近,但是它毕竟还是Web应用程序.而Web应用程序的特点,就是基于浏览器与服务器的请求与响应的执行方式. ...
- Atitit 函数式编程与命令式编程的区别attilax总结 qbf
Atitit 函数式编程与命令式编程的区别attilax总结 qbf 1.1. 函数式程序就是一个表达式.命令式程序就是一个冯诺依曼机的指令序列. 命令式编程是面向计算机硬件的抽象,有变量(对应着存 ...
- c#设计模式-工厂方法
一. 工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中. 工厂方法模式是简单工 ...
- git查看日志
git查看日志 git log -n 显示前N条记录 git log -3 退出log命令 直接输入: q git log --stat -n 显示提交的文件的简要的修改统计 $ git log -- ...