Skip to content

Commit

Permalink
修复多个order by的bug #4
Browse files Browse the repository at this point in the history
  • Loading branch information
longxianghui committed Sep 4, 2020
1 parent 502b279 commit d08e24e
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 28 deletions.
52 changes: 25 additions & 27 deletions README.MD
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
## 背景
17年开始,公司开始向DotNet Core转型,面对ORM工具的选型,当时围绕Dapper和EF发生了激烈的讨论。项目团队更加关注快速交付,他们主张使用EF这种能快速开发的ORM工具而在线业务团队对性能有更高的要求,他们更希望使用能直接执行Sql语句的Dapper,这样可控性更高。而对于架构团队来说,满足开发团队的各种需求,提高他们的开发效率是最核心的价值所在,所以当时决定做一个混合型的既支持EF又支持dapper的数据仓储。
#### 背景
17年开始,公司开始向DotNet Core转型,面对ORM工具的选型,当时围绕Dapper和EF发生了激烈的讨论。项目团队更加关注快速交付,他们主张使用EF这种能快速开发的ORM工具;而在线业务团队对性能有更高的要求,他们更希望使用能直接执行Sql语句的Dapper这样可控性更高。而对于架构团队来说,满足开发团队的各种需求,提高他们的开发效率是最核心的价值所在,所以当时决定做一个混合型的既支持EF又支持dapper的数据仓储。

## 为什么选择EF+Dapper
目前来说EF和Dapper是.NET平台最主流的ORM工具,团队成员的接受程度很高,相关的资料非常齐全,学习成本很低,各种坑也最少。
#### 为什么选择EF+Dapper
目前来说EF和Dapper是.NET平台最主流的ORM工具,团队成员的接受程度很高,学习成本最低,因为主主流,所以相关的资料非常齐全,各种坑也最少。

## 介绍
#### 介绍
1. 它不是一个ORM工具,它不做任何关于数据底层的操作
2. 它是一个简易封装的数据库仓储和工作单元模型
3. 能帮助你快速的构建项目的数据访问层
4. 经过了2年多时间,10个项目组,大小近100多个线上项目的考验
5. 支持EF和Dapper,可以在项目中随意切换使用
6. 支持工作单元模式,也支持传统事务
6. 支持工作单元模式,也支持事务
7. 支持Mysql和Mssql
8. 支持同步和异步操作,推荐使用异步

> PS: 简单操作使用EF,复杂sql操作使用Dapper是快速开发的秘诀。
## 使用方法
#### 使用方法
引入nuget
```
<PackageReference Include="Leo.Chimp" Version="2.1.2" />
Expand Down Expand Up @@ -83,7 +82,7 @@ public class ValuesController : ControllerBase
}
}
```
## 详细使用说明
#### 详细使用说明
查询
```
//根据主键查询
Expand Down Expand Up @@ -116,20 +115,20 @@ _unitOfWork.QueryPagedListAsync<School>(1, 10, "select * from school order by id
```
//新增,支持批量新增
_schoolRepository.Insert(school);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.SaveChanges();
```
```
//sql语句新增
await _unitOfWork.ExecuteAsync("insert school(id,name) values(@Id,@Name)",school);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.ExecuteAsync("insert school(id,name) values(@Id,@Name)",
school);
```
编辑
```
//编辑,支持批量编辑
var school = await _schoolRepository.GetByIdAsync(Id);
var school = _schoolRepository.GetByIdAsync(Id);
school.Name="newschool";
_schoolRepository.Update(school);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.SaveChanges();
```
```
//编辑,不用先查询
Expand All @@ -139,29 +138,29 @@ var school = new School
Name = "newschool"
};
_schoolRepository.Update(school, x => x.Name);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.SaveChanges();
```
```
//sql语句编辑
await _unitOfWork.ExecuteAsync("update school set name=@Name where id=@Id",school);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.ExecuteAsync("update school set name=@Name where id=@Id",
school);
```
删除
```
//删除,支持批量删除
_schoolRepository.Delete(school);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.SaveChanges();
```
```
//根据lambda删除
_schoolRepository.Delete(x => x.Id == Id);
await _unitOfWork.SaveChangesAsync();
_unitOfWork.SaveChanges();
```
事务
```
//工作单元模式使用事务
await _schoolRepository.InsertAsync(school1);
await _schoolRepository.InsertAsync(school2);
await _schoolRepository.InsertAsync(school1);
await _unitOfWork.SaveChangesAsync();
```
```
Expand Down Expand Up @@ -204,12 +203,11 @@ using (var tran = _unitOfWork.BeginTransaction())
高级用法
```
//通过GetConnection可以使用更多dapper扩展的方法
await _unitOfWork.GetConnection().QueryAsync("select * from school");
_unitOfWork.GetConnection().QueryAsync("select * from school");
```
## 写在最后
Chimp核心是基于EF和Dapper的,所以EF和Dapper的功能都可以使用。比如导航属性,字段映射等等。这个库是线上项目核心依赖,会长期更新维护,希望大家能提出更好的意见。
QQ群:687800650 有问题可以加群交流
#### 写在最后
Chimp核心是基于EF和Dapper的,所以EF和Dapper一切功能都可以使用。比如导航属性,字段映射等等。这个库是线上项目核心依赖,会长期更新维护,希望大家能提出更好的意见。

## 项目地址
数据库脚本在根目录的sqlscript文件夹里面
[github地址](https://github.com/longxianghui/chimp.git)
#### 项目地址
数据库脚本在根目录的sqlscript文件夹里面
[github地址](https://github.com/longxianghui/chimp.git)
2 changes: 1 addition & 1 deletion src/Leo.Chimp/DapperAdapter/PagingUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class PagingUtil
private static readonly Regex _rexSelect = new Regex(@"^\s*SELECT\s+(.+?)\sFROM\s", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);

private static readonly Regex _rexSelect1 = new Regex(@"^\s*SELECT\s+(.+?)\sFROM\s*\(+\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
private static readonly Regex _rexOrderBy = new Regex(@"\s+ORDER\s+BY\s+([^\s]+(?:\s+ASC|\s+DESC)?)\s*$", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
private static readonly Regex _rexOrderBy = new Regex(@"\s+ORDER\s+BY\s+(([^\s]+(?:\s+ASC|\s+DESC)?)+)\s*$", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);

/// <summary>
/// 分割SQL
Expand Down

0 comments on commit d08e24e

Please sign in to comment.