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(1);//根據主鍵查詢(model中必須同步標識主鍵[SugarColumn(IsPrimaryKey =true,IsIdentity =true)])
 var total = 0;
 var getbyWhere = db.Queryable<UserModel>().Where(it => it.age == 18).ToPageList(1, 2, 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(2, 2);

(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 == 18 || dep.id == 1 || 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(1,2);

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM