【從零開始搭建本身的.NET Core Api框架】(三)集成輕量級ORM——SqlSugar:3.2 在框架的基礎上利用SqlSugar快速實現CRUD實戰篇

目錄html

.  建立項目並集成swagger
前端

  1.1 建立git

  1.2 完善github

二. 搭建項目總體架構數據庫

三. 集成輕量級ORM框架——SqlSugarjson

  3.1 搭建環境api

  3.2 實戰篇:利用SqlSugar快速實現CRUD架構

  3.3 生成實體類app

 


 

 

這一章將利用目前爲止搭建好的框架,實戰地編寫一個學生類的完整功能接口。框架

 

這裏學生類的信息就只設置三個:【Id】、【班級Id】和【姓名】,咱們的目標是快速實現這個類基礎的C(增)R(查)U(改)D(刪)。

源碼我上傳了Github,下載地址在文末。

 

1)數據庫建表

 

Tid設置爲主鍵,並設置自增加。

 

2)編寫對應的實體類

 

3)編寫數據接口層

接口層我建議先把基礎的CRUD寫出來,後期須要其餘功能在往上加。

這裏我把5個功能定義爲基礎功能

一. GetPageList 獲取分頁列表功能

二. Get 根據Id獲取單個實體

三. Add 添加實體

四. Update 編輯實體(這裏的編輯是根據Id編輯全部信息,只做爲基礎功能,大多狀況的編輯須要另外編寫)

五. Dels 刪除實體(兼容了批量刪除)

也就是說,每生成一個實體類,接口層裏都應有對應該實體類的這五個基本功能。

using RayPI.Entity; using RayPI.Model; using System; using System.Collections.Generic; using System.Text; namespace RayPI.IService { public interface IStudent { #region base
        /// <summary>
        /// 獲取分頁列表 /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        TableModel<Student> GetPageList(int pageIndex, int pageSize); /// <summary>
        /// 獲取單個 /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Student Get(long id); /// <summary>
        /// 添加 /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        bool Add(Student entity); /// <summary>
        /// 編輯 /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        bool Update(Student entity); /// <summary>
        /// 批量刪除 /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        bool Dels(dynamic[] ids); #endregion } }
數據接口層

 

4)數據層

 

該層繼承上面的接口層,因此須要實現數據接口層的全部方法:

using RayPI.Entity; using RayPI.IService; using RayPI.Model; using SqlSugar; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; namespace RayPI.Service { public class StudentService : BaseDB, IStudent { //private SqlSugarClient db = BaseDB.GetClient();
        public SimpleClient<Student> sdb = new SimpleClient<Student>(BaseDB.GetClient()); #region base
        public TableModel<Student> GetPageList(int pageIndex, int pageSize) { PageModel p = new PageModel() { PageIndex = pageIndex, PageSize = pageSize }; Expression<Func<Student, bool>> ex = (it => 1 == 1); List<Student> data = sdb.GetPageList(ex, p); TableModel<Student> t = new TableModel<Student>(); t.Code = 0; t.Count = p.PageCount; t.Data = data; t.Msg = "成功"; return t; } public Student Get(long id) { return sdb.GetById(id); } public bool Add(Student entity) { return sdb.Insert(entity); } public bool Update(Student entity) { return sdb.Update(entity); } public bool Dels(dynamic[] ids) { return sdb.DeleteByIds(ids); } #endregion } }

從這裏開始就稍微能感覺到SqlSugar的強大了~

能夠看到,除了第一個獲取分頁列表,其餘的獲取單個、增長、修改、批量刪除全是一行語句完成。

這裏獲取分頁列表多處幾行是由於,咱們須要向前端返回一個List的實體集合外,還須要返回必要的記錄總數、信息等參數,以方便前端對接。

 

這裏如此方便主要是得益於SqlSugar幫咱們繼承了一個基礎操做類叫SimpleClient,利用它封裝好的函數,咱們就能夠實現大部分基礎的數據庫實體操做。若是SimpleClient知足不了你的需求的話,咱們可使用SqlSugarClient來完成更加複雜的操做。

BTW,

Expression<Func<Student, bool>> ex = (it => 1 == 1);

該句爲恆成立條件,Expression<Func<Student, bool>>爲表達式類型,這裏由於只須要實現分頁,不須要其餘檢索條件,因此寫了1==1,也就是恆成立。

 

5)業務邏輯層

咱們須要先將前面說的五種基礎功能寫到admin裏,代碼以下:

using RayPI.Entity; using RayPI.IService; using RayPI.Model; using SqlSugar; using System; using System.Collections.Generic; using System.Text; namespace RayPI.Bussiness.Admin { public class StudentBLL { private IStudent IService =new Service.StudentService(); public Student GetById(long id) { return IService.Get(id); } public TableModel<Student> GetPageList(int pageIndex,int pageSize) { return IService.GetPageList(pageIndex, pageSize); } public MessageModel<Student> Add(Student entity) { if (IService.Add(entity)) return new MessageModel<Student> { Success = true, Msg = "操做成功" }; else
                return new MessageModel<Student> { Success = false, Msg = "操做失敗" }; } public MessageModel<Student> Update(Student entity) { if(IService.Update(entity)) return new MessageModel<Student> { Success = true, Msg = "操做成功" }; else
                return new MessageModel<Student> { Success = false, Msg = "操做失敗" }; } public MessageModel<Student> Dels(dynamic[] ids) { if (IService.Dels(ids)) return new MessageModel<Student> { Success = true, Msg = "操做成功" }; else
                return new MessageModel<Student> { Success = false, Msg = "操做失敗" }; } } }
業務邏輯層

 

6)控制器層

代碼以下:

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using RayPI.Bussiness.Admin; using RayPI.Entity; namespace RayPI.Controllers.Admin { /// <summary>
    /// 學生模塊 /// </summary>
    [Produces("application/json")] [Route("api/admin/[controller]")] public class StudentController : Controller { private StudentBLL bll = new StudentBLL(); #region base
        /// <summary>
        /// 獲取學生分頁列表 /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
 [HttpGet] public JsonResult GetStudentPageList(int pageIndex=1, int pageSize=10) { return Json(bll.GetPageList(pageIndex, pageSize)); } /// <summary>
        /// 獲取單個學生 /// </summary>
        /// <param name="id">Id</param>
        /// <returns></returns>
        [HttpGet("{id}")] public JsonResult GetStudentById(long id) { return Json(bll.GetById(id)); } /// <summary>
        /// 添加 /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
 [HttpPost] public JsonResult Add(Student entity=null) { if (entity == null) return Json("參數爲空"); return Json(bll.Add(entity)); } /// <summary>
        /// 編輯學生 /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
 [HttpPut] [Route("Student")] public JsonResult Update(Student entity=null) { if (entity == null) return Json("參數爲空"); return Json(bll.Update(entity)); } /// <summary>
        /// 刪除學生 /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
 [HttpDelete] public JsonResult Dels(dynamic[] ids=null) { if (ids.Length==0) return Json("參數爲空"); return Json(bll.Dels(ids)); } #endregion } }
admin控制器層

這裏我作了是否爲空的驗證,有人不喜歡在控制器層寫驗證,也能夠寫到業務邏輯層裏。

 

 

到此,一個實體最基礎的CRUD就算完成了,F5運行調試:

 

 

須要源碼的能夠從下面的連接下載~

源碼下載:點擊下載

 

 參考內容:http://www.codeisbug.com/Doc/8

相關文章
相關標籤/搜索