当前位置: 首页 > news >正文

ABP - SqlSugar [SqlSugarModule、ISqlSugarClient、SqlSugarRepository]

SqlSugar ORM 集成

核心辅助类

  • SqlSugarModule:SqlSugar集成模块(需手动引入社区包)。
  • ISqlSugarClient:SqlSugar核心客户端。
  • SqlSugarRepository<T>:基于SqlSugar的仓储实现。

你关注到了ABP与SqlSugar ORM的集成细节,这个组合能兼顾ABP的模块化架构和SqlSugar的高效查询能力,非常实用。下面通过具体示例和讲解,带你理解这三个核心组件的用法:

1. SqlSugarModule:SqlSugar的集成入口(模块配置)

SqlSugarModule是ABP框架中集成SqlSugar的核心模块,负责初始化SqlSugar客户端、注册相关服务。使用前需先引入社区包(如Abp.SqlSugarSqlSugarCore),再在自定义模块中配置依赖和连接信息。

示例:配置SqlSugarModule

// 1. 先引入必要包(NuGet安装)
// - SqlSugarCore(SqlSugar核心包)
// - Abp.SqlSugar(ABP与SqlSugar的集成包,社区维护)using Volo.Abp.Modularity;
using SqlSugar;[DependsOn(typeof(AbpSqlSugarModule) // 依赖SqlSugar集成模块
)]
public class MyAppModule : AbpModule
{public override void ConfigureServices(ServiceConfigurationContext context){// 2. 配置SqlSugar客户端context.Services.AddSqlSugarClient(config =>{// 配置数据库连接字符串config.ConnectionString = "Server=.;Database=MyAppDb;Uid=sa;Pwd=123456;";// 配置数据库类型(SqlServer/MySql/PostgreSQL等)config.DbType = DbType.SqlServer;// 可选:配置全局查询过滤(如多租户隔离、软删除)config.GlobalFilter.Add("SoftDelete", it => it.GetType().GetProperty("IsDeleted") != null, it => (bool)it.GetValue("IsDeleted") == false);// 可选:开启日志(便于调试SQL)config.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine($"SQL: {sql}");};});}
}

讲解:

  • 依赖声明:必须在自定义模块上添加[DependsOn(typeof(AbpSqlSugarModule))],确保SqlSugar的基础服务被注册。
  • 核心配置:通过AddSqlSugarClient配置数据库连接、数据库类型,这是SqlSugar工作的基础。
  • 高级配置:可通过GlobalFilter添加全局过滤(如软删除逻辑)、通过Aop配置SQL日志或事务拦截,减少重复代码。

2. ISqlSugarClient:SqlSugar的核心操作客户端

ISqlSugarClient是SqlSugar的核心接口,封装了所有数据库操作(查询、插入、更新、删除、事务等),通过ABP的依赖注入可直接在服务中使用,无需手动创建实例。

示例:使用ISqlSugarClient操作数据库

using Volo.Abp.DependencyInjection;
using SqlSugar;
using System.Linq.Expressions;public class BookService : ITransientDependency
{private readonly ISqlSugarClient _db;// 构造函数注入ISqlSugarClient(由SqlSugarModule自动注册)public BookService(ISqlSugarClient db){_db = db;}// 1. 查询(单条数据)public async Task<Book> GetBookByIdAsync(Guid id){// 链式查询:Where条件 -> 取单条return await _db.Queryable<Book>().Where(book => book.Id == id).FirstAsync();}// 2. 分页查询public async Task<PageResult<BookDto>> GetBooksByPageAsync(int pageIndex, int pageSize){// 分页查询:Skip(跳过条数)-> Take(取条数)-> 总计数var totalCount = await _db.Queryable<Book>().CountAsync();var books = await _db.Queryable<Book>().OrderBy(book => book.CreationTime, OrderByType.Desc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();// 转换为DTO并返回分页结果return new PageResult<BookDto>{TotalCount = totalCount,Items = ObjectMapper.Map<List<Book>, List<BookDto>>(books)};}// 3. 事务操作(插入+更新)public async Task CreateBookWithAuthorAsync(Book book, Author author){// 开启事务using (var tran = _db.Ado.BeginTran()){try{// 插入作者await _db.Insertable(author).ExecuteReturnSnowflakeIdAsync();// 关联作者ID并插入书籍book.AuthorId = author.Id;await _db.Insertable(book).ExecuteAsync();// 提交事务tran.Commit();}catch (Exception){// 回滚事务tran.Rollback();throw;}}}
}

讲解:

  • 核心能力ISqlSugarClient提供链式查询(Queryable)、插入(Insertable)、更新(Updateable)、删除(Deleteable)等API,语法简洁且支持Lambda表达式。
  • 事务支持:通过_db.Ado.BeginTran()开启事务,配合Commit()/Rollback()实现事务一致性,也可结合ABP的[UnitOfWork]特性自动管理事务。
  • 灵活性:支持原生SQL(_db.Ado.SqlQuery)、存储过程调用,适合复杂查询场景,同时保留ORM的类型安全特性。

3. SqlSugarRepository<T>:基于SqlSugar的仓储实现

SqlSugarRepository<T>是ABP风格的仓储类,封装了ISqlSugarClient的基础CRUD操作,提供更符合ABP开发习惯的仓储接口(如GetAsyncInsertAsync),同时支持扩展自定义查询。

示例:自定义仓储继承SqlSugarRepository<T>

using Volo.Abp.Domain.Repositories;
using SqlSugar;// 1. 定义实体(Book)
public class Book : Entity<Guid>
{public string Name { get; set; }public decimal Price { get; set; }public Guid? AuthorId { get; set; }public DateTime CreationTime { get; set; } = DateTime.Now;
}// 2. 定义仓储接口(继承IRepository,符合ABP规范)
public interface IBookRepository : IRepository<Book, Guid>
{// 扩展自定义方法:查询作者的所有书籍Task<List<Book>> GetBooksByAuthorIdAsync(Guid authorId);
}// 3. 实现仓储(继承SqlSugarRepository,复用基础CRUD)
public class BookRepository : SqlSugarRepository<Book, Guid>, IBookRepository
{// 构造函数注入ISqlSugarClient(父类已封装,可直接使用)public BookRepository(ISqlSugarClient sqlSugarClient) : base(sqlSugarClient){}// 实现自定义查询方法public async Task<List<Book>> GetBooksByAuthorIdAsync(Guid authorId){// 可直接使用父类的DbClient(即ISqlSugarClient)进行查询return await DbClient.Queryable<Book>().Where(book => book.AuthorId == authorId).OrderBy(book => book.CreationTime).ToListAsync();}
}// 4. 在服务中使用自定义仓储
public class BookAppService : ApplicationService
{private readonly IBookRepository _bookRepository;public BookAppService(IBookRepository bookRepository){_bookRepository = bookRepository;}public async Task<List<BookDto>> GetByAuthorAsync(Guid authorId){// 调用仓储的自定义方法var books = await _bookRepository.GetBooksByAuthorIdAsync(authorId);return ObjectMapper.Map<List<Book>, List<BookDto>>(books);}public async Task DeleteAsync(Guid id){// 调用父类封装的基础方法(DeleteAsync)await _bookRepository.DeleteAsync(id);}
}

讲解:

  • ABP规范兼容SqlSugarRepository<T>实现了ABP的IRepository接口,可无缝替换ABP默认的EF Core仓储,无需修改服务层代码。
  • 基础CRUD复用:父类已封装GetAsyncInsertAsyncUpdateAsyncDeleteAsync等基础方法,无需重复编写。
  • 自定义扩展:通过继承SqlSugarRepository<T>,可在子类中扩展复杂查询(如多表关联、聚合查询),同时保留SqlSugar的高效语法。

核心总结与优势

  1. 模块化集成SqlSugarModule让SqlSugar融入ABP的模块生命周期,配置集中且可复用。
  2. 高效操作ISqlSugarClient提供比EF Core更简洁的查询语法,性能更优(尤其复杂查询场景)。
  3. 仓储适配SqlSugarRepository<T>桥接SqlSugar与ABP的仓储模式,兼顾ORM灵活性和架构规范性。

要不要我帮你整理一份ABP+SqlSugar的基础项目模板代码?包含模块配置、仓储实现、服务调用的完整流程,你可以直接复用。

http://www.gsyq.cn/news/29693.html

相关文章:

  • Odoo18.0 对接 京东快递
  • 轮次检测模型 VoTurn-80M 开源,多模态融合架构;OpenAI 收购桌面助手 Sky:实时识别屏幕自然语言交互丨日报
  • SAP维护汇率的关键Tcode
  • 第4天(中等题 滑动窗口、哈希表)
  • 申威服务器安装Java11(swjdk-11u-9.ky10.sw_64.rpm)详细操作步骤(附安装包)
  • Linux下的拼音输入法 (3)
  • P2606 [ZJOI2010] 排列计数 分析
  • 实用指南:MacOS - Clang使用bits/stdc++.h - 非官方(竞赛用) - 通用方法
  • 设计模式:代码界的 “光之巨人” 养成指南(附 C++ 实战)
  • 详细介绍:17-Language Modeling with Gated Convolutional Networks
  • 算法分析--生成排列
  • 三大安全认证授权协议深度对比:OAuth、OpenID Connect与SAML
  • (简记)(自用)线段树区间拆分时间复杂度证明
  • SpringBoot整合缓存2-Redis
  • 10.24 CSP-S 模拟37 改题记录
  • NOI25D2T2
  • 数字人企业:数字人公司重点推荐与选择指南
  • 据说每邀请一位朋友加入Comet,您可以获得10刀乐奖励:D
  • 王炸!OpenAI 发布 Atlas 浏览器!!
  • 课后作业4
  • cn域名隐私保护
  • 【开题答辩全过程】以 M11289生鲜商城为例,具备答辩的问题和答案
  • Linux手动安装最新版 CMake
  • 2025年新疆喀纳斯旅游服务权威推荐榜单:新疆/阿勒泰/禾木深度游旅行社综合评测
  • 2025 OSCAR丨与创新者同频!Apache RocketMQ 邀您共赴开源之约
  • 2025年PSA制氮设备厂家权威推荐榜单:电解水制氢设备/氦气纯化系统/氘气回收纯化源头厂家精选
  • 解决git clone只有master分支的问题
  • 一文读懂循环神经网络(RNN):原理、局限与LSTM解决方案 - 指南
  • 2025年北京cppm认证培训公司权威推荐榜单:cppm考前培训/cppm证书培训/cppm课程培训源头公司精选
  • 0273-GRPC-tonic 进行编解码