欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-30 10:09:05
因为框架目前为止还没有集成根据实体自动生成数据表(或是根据数据表自动生成实体的功能),所以我们老老实实按照顺序来。 这里以学生类为例,信息的话就只设置三个,Id、班级Id和姓名,我们的目标是快速实现这个类的C(增)R(查)U(改)D(删)。 1)数据库建表 2)编写对应的实体类 3)编写数据接口层 ......

因为框架目前为止还没有集成根据实体自动生成数据表(或是根据数据表自动生成实体的功能),所以我们老老实实按照顺序来。

这里以学生类为例,信息的话就只设置三个,Id、班级Id和姓名,我们的目标是快速实现这个类的C(增)R(查)U(改)D(删)。

 

1)数据库建表

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

2)编写对应的实体类

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

3)编写数据接口层

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

接口层我建议先把基础的CRUD写出来,后期需要其他功能在往上加。

这里我把5个功能定义为基础功能

一. GetPageList获取分页列表功能

二. Get根据Id获取单个实体

三. Add添加实体

四. Update编辑实体(这里的编辑是根据Id编辑所有信息,只作为基础功能,大多情况的编辑需要另外编写)

五. Dels删除实体(兼容了批量删除)

也就是说,每生成一个实体类,接口层里都应有对应该实体类的这五个基本功能。

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.2 在框架的基础上利用SqlSugar快速实现CRUD实战篇
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)数据层

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

该层继承上面的接口层,所以需要实现数据接口层的所有方法:

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)业务逻辑层

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

我们需要先将前面说的五种基础功能写到admin里,代码如下:

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.2 在框架的基础上利用SqlSugar快速实现CRUD实战篇
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)控制器层

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

代码如下:

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.2 在框架的基础上利用SqlSugar快速实现CRUD实战篇
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运行调试:

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

 

需要源码的可以从下面的链接下载~

源码下载: