【BlogBook书】5、Sqlsugar:数据库ORM

2024-01-15 17:36:51 浏览数 (1)

框架高度集成国产优秀ORM——Sqlsugar,支持常规企业级所有的数据库操作场景:

1、全部兼容国产数据库;2、支持同时连接操作多种数据库,且相互之间不受影响;3、支持事务;4、支持主从分离模式;5、支持主备模式(主库挂了,会自动切换到备用库);6、详细的Sql操作日志;

一、相关的依赖注入配置

代码语言:javascript复制
builder.Services.AddSqlsugarSetup();

相关参数设置

代码语言:javascript复制
//MainDb:标识当前项目的主库,所对应的连接字符串的Enabled必须为true
//Log:标识日志库,所对应的连接字符串的Enabled必须为true,且Log关键字不能修改
//从库只需配置Slaves数组,要求数据库类型一致!,比如都是SqlServer

//主备模式,又称故障转移方案://如果主库挂了,会自动切换到备用连接,格式如下://备用连接的ConnId配置为主库的ConnId 数字即可,比如主库的ConnId为Main,那么备用连接的ConnId为Mian1
//主库、备用库无需数据库类型一致!
//备用库不会有程序维护,需要手动维护!"MainDB": "Main", //当前项目的主库,所对应的连接字符串的Enabled必须为true
"DBS": [
  /*
    对应下边的 DBType
    MySql = 0,
    SqlServer = 1,
    Sqlite = 2,
    Oracle = 3,
    PostgreSQL = 4,
    Dm = 5,//达梦
    Kdbndp = 6,//人大金仓
  */
  {
    "ConnId": "Main",
    "DBType": 2,
    "Enabled": true,
    "Connection": "WMBlog.db", //sqlite只写数据库名就行
    "Slaves": [
      {
        "HitRate": 0,// 值越大,优先级越高 0不使用
        "Connection": "WMBlog2.db"
      }
    ]
  },
  {
    "ConnId": "Main2",
    "DBType": 2,
    "Enabled": true,
    "Connection": "WMBlog3.db", //sqlite只写数据库名就行
    "Slaves": [
      {
        "HitRate": 0,// 值越大,优先级越高 0不使用
        "Connection": "WMBlog4.db"
      }
    ]
  },
  {
    "ConnId": "Log", //日志库连接固定名称,不要改,其他的可以改
    "DBType": 2,
    "Enabled": true,
    "HitRate": 50,
    "Connection": "WMBlogLog.db" //sqlite只写数据库名就行
  },
  {
    "ConnId": "WMBLOG_MSSQL_1",
    "DBType": 1,
    "Enabled": false,
    "Connection": "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
    "ProviderName": "System.Data.SqlClient"
  },
  {//SqlServer连接配置例子
    "ConnId": "WMBLOG_MSSQL_2",
    "DBType": 1,
    "Enabled": false,
    "Connection": "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
    "ProviderName": "System.Data.SqlClient"
  },
  {//Mysql连接配置例子
    "ConnId": "WMBLOG_MYSQL",
    "DBType": 0,
    "Enabled": false,
    "Connection": "server=localhost;Database=blog;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;"
  },
  {//Oracle连接配置例子
    "ConnId": "WMBLOG_ORACLE",
    "DBType": 3,
    "Enabled": false,
    "Connection": "Data Source=127.0.0.1/ops;User ID=OPS;Password=123456;Persist Security Info=True;Connection Timeout=60;"
  },
  {//达梦连接配置例子
    "ConnId": "WMBLOG_DM",
    "DBType": 5,
    "Enabled": false,
    "Connection": "Server=xxxxx:5236;User Id=xxxxx;PWD=xxxxx;SCHEMA=TESTDBA;"
  },
  {//金仓连接配置例子
    "ConnId": "WMBLOG_KDBNDP",
    "DBType": 6,
    "Enabled": false,
    "Connection": "Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1;"
  }
],

二、使用方式

1、在model层创建一个实体类

代码语言:javascript复制
/// <summary>
 /// 用户访问趋势日志
 /// </summary>
 public class AccessTrendLog : RootEntityTkey<long>
 {
     /// <summary>
     /// 用户
     /// </summary>
     [SugarColumn(Length = 128, IsNullable = true)]
     public string UserInfo { get; set; }

     /// <summary>
     /// 次数
     /// </summary>
     public int Count { get; set; }

     /// <summary>
     /// 更新时间
     /// </summary>
     public DateTime UpdateTime { get; set; } = DateTime.Now;
 }

2、系统封装了仓储层,并用泛型仓储基类来实现自动服务注入,所以这里不用任何操作

具体请看Blog.Core.Repository层下的BaseRepository.cs

3、是Service层写具体的业务逻辑,并抽离接口到IService层

服务层也封装了服务基类,不用做其他操作,直接写逻辑即可

代码语言:javascript复制
public partial class AccessTrendLogServices : BaseServices<AccessTrendLog>, IAccessTrendLogServices
 {

 }

4、最后在Controller层写接口,把服务注入即可,类似这样

代码语言:javascript复制
readonly IModuleServices _moduleServices;
 readonly IUser _user;


 public ModuleController(IModuleServices moduleServices, IUser user)
 {
     _moduleServices = moduleServices;
     _user = user;
 }

0 人点赞