sqlSugar的使用---入门
ORM推荐文档地址:http://www.codeisbug.com/Doc/8
一,新建.net core web项目
二. 项目引入包:sqlSugarCore
三.创建两个表:user, department
四. 新建model(不一定需要与table相同,使用[SugarTable("tableName")]进行model与table的绑定)
namespace SqlSugarTest01.Models
{
[SugarTable("user")]
public class UserModel
{
[SugarColumn(IsPrimaryKey =true,IsIdentity =true)]//如果是主键,此处必须指定,否则会引发InSingle(id)方法异常。
public int id { get; set; }
public string userName { get; set; }
public string userPassword { get; set; }
public int age { get; set; }
public DateTime regTime { get; set; }
public int departmentId { get; set; }
}
}
5.编写代码进行数据库操作,此处为了简便,我书写在HomeController中,开辟了一个方法区,在Index的return view()之前调用,以便进行调试。
(1)数据库连接以及监听
//创建连接实体对象
SqlSugarClient db = new SqlSugarClient(
new ConnectionConfig()
{
ConnectionString = "server=localhost;port=3307;uid=root;pwd=root;database=testsqlsugar",
DbType = DbType.MySql,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据库,如果存在事务,在事务结束之后释放。
InitKeyType = InitKeyType.Attribute//从实体特性中读取主键自增列信息
});
//aop监听sql,此段会在每一个"操作语句"执行时都进入....eg:getbyWhere这里会执行两次
db.Aop.OnLogExecuting = (sql, pars) => {
string sqlStempt = sql + "参数值:" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
};
(2)单表查询
/*查询---单表*/
var list = db.Queryable<UserModel>().ToList();//查询所有
var getById = db.Queryable<UserModel>().InSingle();//根据主键查询(model中必须同步标识主键[SugarColumn(IsPrimaryKey =true,IsIdentity =true)])
var total = ;
var getbyWhere = db.Queryable<UserModel>().Where(it => it.age == ).ToPageList(, , ref total);//根据条件查询/分页.
(3)双表查询
/*查询---多表*/
var list0 = db.Queryable<UserModel, DepartmentModel>((user, dep) => new object[] {
JoinType.Left,user.departmentId == dep.id}).Select((user, dep) => new { Id = user.id, depId = user.departmentId, name = user.userName }).ToList();
//生成的sql: SELECT `user`.`id` AS `Id` , `user`.`departmentId` AS `depId` , `user`.`userName` AS `name` FROM `user` user Left JOIN `department` dep ON( `user`.`departmentId` = `dep`.`id` )
//可用预先定义好的dto类自动填充select结果集,自动填充会比较依赖字段取名规则(不指定对应关系)
List<userDepDto> list1 = db.Queryable<UserModel, DepartmentModel>((user, dep) => new object[] { JoinType.Left, user.departmentId == dep.id }).Select<userDepDto>().ToList();
//可用预先定义好的dto类填充select结果集(指定对应关系)
List<userDepDto> list2 = db.Queryable<UserModel, DepartmentModel>((user, dep) => new object[] { JoinType.Left, user.departmentId == dep.id }).Select((user, dep) =>
new userDepDto { Id = dep.id, userName = user.userName, regTime = user.regTime, name = dep.name }).ToList();
(4)多表查询分页
//多表查询分页
var list4 = db.Queryable<UserModel, DepartmentModel>((user, dep) => new object[] { JoinType.Left, user.departmentId == dep.id }).Select((user, dep) => new userDepDto { Id =
user.id, userName = user.userName, regTime = user.regTime, name = dep.name }).ToPageList(, );
(5)三表查询
//三表查询,返回完整的三表对象。
var list3 = db.Queryable<UserModel, DepartmentModel, UserInfoModel>((user, dep, userinfo) => new object[] { JoinType.Left, user.departmentId == dep.id, JoinType.Left, user.id ==
userinfo.UserId }).Where((user, dep, userinfo) => user.age == || dep.id == || userinfo.Sex == "男")
.OrderBy((user) => user.id).OrderBy((user, dep) => dep.id, OrderByType.Desc).Select((user, dep, userInfo) => new { user = user, dep = dep, userInfo = userInfo }).ToList();
(6)两个Queryable的join
//两个Queryable的join
var q1 = db.Queryable<UserModel, DepartmentModel>((user, dep) => new object[] { JoinType.Left, user.departmentId == dep.id }).Select((user,dep)=>new userDepDto()
{ Id=user.id,userName=user.userName,regTime=user.regTime,name=dep.name});//在此处,sql语句还没真正执行,aop也监听不到
var q2 = db.Queryable<UserModel>();
// inner join
var innerJoinList = db.Queryable(q1, q2, (j1, j2) => j1.Id == j2.id).Select((j1, j2) => j1).ToList();//此处sql才真正执行
//left join
var leftJoinList = db.Queryable(q1, q2, JoinType.Left, (j1, j2) => j1.Id == j2.id).Select((j1,j2)=>j1).ToList();
(7)多表简化查询(当我们不需要left join和right join时,使用inner join可以简写查询语句)
//简化查询 双表查询
var list5 = db.Queryable<UserModel, DepartmentModel>((user, dep) => user.departmentId == dep.id).Select((user, dep) => new { user.id, user.userName, dep.name }).ToList();
//三表查询
var list6 = db.Queryable<UserModel, DepartmentModel, UserInfoModel>((user, dep, userinfo) => user.departmentId == dep.id && user.id == userinfo.UserId).Select((user, dep, userinfo) => new { user = user, dep = dep, userinfo = userinfo }).ToList();
//3表分页查询
var list7 = db.Queryable<UserModel, DepartmentModel, UserInfoModel>((user, dep, userinfo) => user.departmentId == dep.id && user.id == userinfo.UserId).Select((user, dep, userinfo) => new { user.id, user.userName, user.age, dep.name, userinfo.Sex }).ToPageList(,);
sqlSugar的使用---入门的更多相关文章
- SqlSugar ORM 入门到精通【一】入门篇
背景 SqlSugar是一款国产ORM,除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手. 2.x版本正式在自已公司内部项目使用 3.x版本得到了更多公司的喜欢不过也会 ...
- SqlSugar ORM 入门篇2 【查询】 让我们实现零SQL
SqlSugar在查询的功能是非常强大的,多表查询.分页查询 . 一对一查询.二级缓存.一对多查.WhenCase等复杂函数.Mapper功能.和拉姆达自定义扩展等,用好了是可以做到真正零SQL的一款 ...
- sqlsugar入门(4)-修改源码支持多主键保存ISaveable
1.查看其它接口发现少了一个最重要的SaveBuilder.此文件是存放sql模板,where条件,select解析,组装成tosqlstring的最后一个类. 添加文件 using System; ...
- sqlsugar入门(3)-DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")源码修改
1.注释SqlSugar\ExpressionsToSql\ResolveItems\MethodCallExpressionResolve文件下的GetMethodValue方法 case &quo ...
- sqlsugar入门(1)-初识sugar正确打开sugar的方式
1.实例化DB public static SqlSugarClient GetDB(string s) { var ssc = new SqlSugarClient(new ConnectionCo ...
- sqlsugar入门(2)-C#方法与sugar自定义函数的区别
1.使用tostring获取当天数据 var list = ssc.Queryable<Student>().Where(o => o.CreateTime.Value.ToStri ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)
前言 Hi, 大家好,还是星期五,还是Rector,又在图享网准时和大家见面了. 今天给大家带来系列教程<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Auto ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
随机推荐
- Javascript继承2:创建即继承----构造函数继承
//声明父类 function SuperClass(id){ //值类型公有属性 this.id = id; //引用类型公有属性 this.books = ['Html','Css']; } // ...
- 清除float影响
条件: 父元素中有子元素float的话,可能就会影响父元素的高度,从而影响布局: 解决方案: 1.直接给父元素定高: 弊端:必须知道父元素的高: 2. 父元素使用overflow属性值为hidden解 ...
- layui 弹窗的iframe 父子界面相互传值
1.父界面向子界面传值 [1].父界面打开子界面: function show_layer(){ layer.open({ type: 2, area: [w+'px', h +'px'], fix: ...
- 如何用ABP框架快速完成项目(9) - 用ABP一个人快速完成项目(5) - 不要执着于设计模式和DDD理论,避免原教旨主义
为什么要写这节文章呢? 首先主动看我这系列文章和参加活动课程的同学, 肯定是积极好学的. 所以很大概率是学过设计模式和DDD理论的. 很大概率不是走一点都不懂设计模式和DDD理论这个极端, 而是走 ...
- 并发工具箱 concurrent包的原理分析以及使用
1.java.util.concurrent 包下的类分类图 locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关,是构建非阻塞算法的基础: executor部分:线程池相 ...
- AndroidStudio安装、配置、测试
AndroidStudio安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装测试 4.模拟器安装.使用 5.常用配置 6.注事事项 7.相关博文 >>看 ...
- android开发——Android开发中的47个小知识
1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environme ...
- DAY4(PYTHON)列表的嵌套,range,for
li=['a','b','开心','c'] print(li[2].replace ( ' 心 ', ' kaixin ' ) ) 输出:'a','b','开kaixin','c' li= ['abc ...
- (后端)解决code唯一码(java)简便方法
public String next() { long appBootTimes = systemVariableService.getAppBootTimes(); return Long.toSt ...
- mysql的连接
本文内容: mysql客户端连接服务端 断开连接 首发日期:2018-04-07 mysql客户端连接服务端: 连接服务端的命令基本语法是: mysql -h host -u user -p -P p ...