WebAPI学习(六):导入SqlSugar+仓储模式

  1. 解决方案新增Respository文件夹,新增类库TEST.Respository,TEST.IRepository

    新增Services文件夹,新增类库TEST.Services,TEST.IServices

    1

  2. Repository以及Model引入SqlsugarCore

    2

  3.  

     Repository新增SqlSugar文件夹,新增BaseDBConfig.cs

    public class BaseDBConfig
    {
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public static string ConnectionString {  get; set; }
    }

    新增DBContext帮助类

    /// <summary>
    /// 数据库帮助类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class DBContext<T> where T : class,new ()
    {
        public DBContext()
        {
            Db = new SqlSugarScope(new ConnectionConfig()
            {
                ConnectionString = BaseDBConfig.ConnectionString,
                DbType = DbType.SqlServer,
                InitKeyType = InitKeyType.Attribute,
                IsAutoCloseConnection = true,
            });
    
            //调试代码,用来打印SQL
            Db.Aop.OnLogExecuting = (sql, pars) =>
            {
                Console.WriteLine($"{sql} \r\n" +
                    $" {Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName,
                        it => it.Value))}");
                Console.WriteLine();
            };
        }
    
        public SqlSugarScope Db { get; set; } //用来处理事务多表查询和复杂的操作
        public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); }} //用来操作当前表的数据
    }
  4.  在appsettings.json添加数据库连接字符串
    "ConnectionString": {
      "SQLServer": "server=.;uid=sa;pwd=123456;database=TESTAPI;Encrypt=True;TrustServerCertificate=True;"
    },
  5. 在Program.cs中添加读取数据库连接字符串
    //读取数据库连接字符串
    BaseDBConfig.ConnectionString = builder.Configuration.GetSection("ConnectionString:SQLServer").Value;
  6. 在IRepository中新增Base文件夹,并添加基类接口IBaseRepository.cs
    /// <summary>
    /// 基类接口,其他接口继承该接口
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IBaseRepository<TEntity> where TEntity : class
    {
        /// <summary>
        /// 根据ID列表查询
        /// </summary>
        /// <param name="objId">ID</param>
        /// <returns></returns>
        Task<TEntity> QueryByID(object objId);
    
        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        Task<List<TEntity>> Query();
    
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<long> Add(TEntity model);
    
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity model);
    
        /// <summary>
        /// 根据ID列表删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<bool> DeleteByIds(object[] ids);
    
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> DeleteById(object id);
    }
  7. 在Repository层中,添加Base文件夹,并添加BaseRespository.cs基类
    public class BaseRepository<TEntity> : DBContext<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
    {
        /// <summary>
        /// 写入实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<long> Add(TEntity model)
        {
            return await Db.Insertable(model).ExecuteCommandAsync();
        }
    
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<bool> DeleteById(object id)
        {
            return await Db.Deleteable<TEntity>().In(id).ExecuteCommandAsync() > 0;
        }
    
        /// <summary>
        /// 根据ID列表删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<bool> DeleteByIds(object[] ids)
        {
            return await Db.Deleteable<TEntity>().In(ids).ExecuteCommandAsync() > 0;
        }
    
        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        public async Task<List<TEntity>> Query()
        {
            return await Db.Queryable<TEntity>().ToListAsync();
        }
    
        /// <summary>
        /// 根据ID查询一条数据
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        public async Task<TEntity> QueryByID(object objId)
        {
            return await Db.Queryable<TEntity>().InSingleAsync(objId);
        }
    
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            return await Db.Updateable(model).ExecuteCommandAsync() > 0;
        }
    }
  8. 在IServices中新增Base文件夹,并添加基类接口IBaseServices.cs
    public interface IBaseServices<TEntity> where TEntity : class
    {
        /// <summary>
        /// 根据ID列表查询
        /// </summary>
        /// <param name="objId">ID</param>
        /// <returns></returns>
        Task<TEntity> QueryByID(object objId);
    
        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        Task<List<TEntity>> Query();
    
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<long> Add(TEntity model);
    
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity model);
    
        /// <summary>
        /// 根据ID列表删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<bool> DeleteByIds(object[] ids);
    
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> DeleteById(object id);
    }
  9. 在Services层中,添加Base文件夹,并添加BaseServices.cs基类
    public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class,new()
    {
        public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();
    
        /// <summary>
        /// 写入实体
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<long> Add(TEntity model)
        {
            return await baseDal.Add(model);
        }
    
        /// <summary>
        /// 根据ID删除数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<bool> DeleteById(object id)
        {
            return await baseDal.DeleteById(id);
        }
    
        /// <summary>
        /// 根据ID列表删除数据
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<bool> DeleteByIds(object[] ids)
        {
            return await baseDal.DeleteByIds(ids);
        }
    
        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        public async Task<List<TEntity>> Query()
        {
            return await baseDal.Query();
        }
    
        /// <summary>
        /// 根据ID查询一条数据
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        public async Task<TEntity> QueryByID(object objId)
        {
            return await baseDal.QueryByID(objId);
        }
    
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            return await baseDal.Update(model);
        }
    }
  10. 在Entity中添加Student.cs学生实体
    /// <summary>
    /// 学生
    /// </summary>
    public class Student
    {
        /// <summary>
        /// ID
        /// </summary>
        public string ID { get; set; }
    
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
    
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
    }
  11. 在IRepository层中,新建IStudentRepository接口,继承自IBaseRepository<Student>

    public interface IStudentRepository:IBaseRepository<Student>
    {
    
    }
  12. 在Repository层中,新建StudentRepository接口,继承自BaseRepository<Student>,IStudentRepository
    public class StudentRepositoty :BaseRepository<Student>,IStudentRepository
    {
    
    }
  13. 在IServices层中,新建IStudentService接口,继承自IBaseServices<Student>
    public interface IStudentServices : IBaseServices<Student>
    {
    }
  14. 在Services层中,新建StudentService接口,继承自BaseService<Student>,IStudentService
    public class StudentServices:BaseServices<Student>,IStudentServices
    {
    }
  15. 新建控制器StudentController,新增接口

    public class StudentController : BaseController
    {
        private readonly IStudentServices stuService;
    
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="studentServices"></param>
        public StudentController(IStudentServices  studentServices)
        {
            stuService = studentServices;
        }
    
        /// <summary>
        /// 添加学生数据
        /// </summary>
        /// <param name="student"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> AddAsync(Student student)
        {
            var count = await stuService.Add(student);
            return Ok(count);
        }
    }
  16. 运行项目,插入数据成功。

    3

    4

     

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容