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 开发过程也遇到了各种坑,插入条数多了也特别 ...
 
随机推荐
- 【Java每日一题】20170224
			
20170223问题解析请点击今日问题下方的“[Java每日一题]20170224”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; import jav ...
 - http协议、web服务器、并发服务器(上)
			
目录 1. HTTP格式 1.1 HTTP GET请求的格式: 1.2 HTTP POST请求的格式: 1.3 HTTP响应的格式: 2. Web静态服务器-显示固定的页面 3. Web静态服务器-显 ...
 - Codeforces Round #304 (Div. 2) -----CF546
			
A. Soldier and Bananas A soldier wants to buy w bananas in the shop. He has to pay k dollars for t ...
 - Java中重写与重载
			
重写(覆盖):发生在子类与父类之间:方法名相同方法的个数.类型相同返回值类型小于等于父类的返回值类型 重载:发生在一个类中:方法名相同方法的个数.类型不同返回值类型可以相同也可以不相同
 - BZOJ2783: [JLOI2012]树(树上前缀和+set)
			
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1215 Solved: 768[Submit][Status][Discuss] Descriptio ...
 - 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
			
题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ...
 - 安装docker17.06.0版本报错和解决方法
			
本人在自己电脑的虚拟机里安装docker ce 17.06.0版本的时候报如下错误: [root@manager2 yum.repos.d]# yum install docker-ce-17.06. ...
 - Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
			
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
 - echarts雷达图点击事件 包含(2.x,3.85,4.02)测试
			
最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts 2x 的点击事件 echarts配置问题:https://www.douban.com/note/509404 ...
 - Git基本操作和GtHub 特殊技巧
			
<GitHub 入门与实践> 笔记 了解GitHub Git 和 GitHub 的区别 在Git中,开发者将源代码存入名为"Git仓库"的资料库中,并加以使用.而Git ...