【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.2 在框架的基础上利用SqlSugar快速实现CRUD实战篇


目录

.  创建项目并集成swagger

  1.1 创建

  1.2 完善

二. 搭建项目整体架构

三. 集成轻量级ORM框架——SqlSugar

  3.1 搭建环境

  3.2 实战篇:利用SqlSugar快速实现CRUD

  3.3 生成实体类

 


 

 

这一章将利用目前为止搭建好的框架,实战地编写一个学生类的完整功能接口。

 

这里学生类的信息就只设置三个:【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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM