文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

学习SqlSugar ORM框架的关键:对其模块与实现原理的详细分析

2024-11-30 12:10

关注

SqlSugar 是一款基于 ADO.NET 的轻量级 ORM 框架,它的核心模块包括 Core、Ado、Queryable、SqlBuilder 和 Attributes 等,下面就逐一进行深度解析。

Core 模块

Core 模块是 SqlSugar 的核心模块,主要实现了 ORM 映射的核心功能。其中包括了一个代码生成器,可以根据相关配置信息自动生成对应的实体类和数据访问层代码。

在 Core 模块中,SqlSugar 使用反射机制获取实体类属性信息,在运行时动态生成 SQL 语句。同时,SqlSugar 中定义了一系列的委托类型,通过委托实现对 SQL 语句、参数值和实体数据的封装和处理,大大简化了数据访问层的编写工作。此外,SqlSugar 中还引入了缓存机制,大大提高了数据访问效率。

Ado 模块

Ado 模块是 SqlSugar 中最底层的模块,用于对数据库进行操作。主要包括了与数据库连接相关的类和方法,例如 ConnectionConfig、SqlConnection、SqlCommand、SqlDataAdapter 等,通过这些类和方法,SqlSugar 可以实现与多种类型的数据库连接。

在 Ado 模块中,SqlSugar 将数据库连接分为两个部分:连接池和操作命令。在连接池中,SqlSugar 提供了一系列的方法,包括创建连接、获取连接、释放连接和关闭连接等。在操作命令中,SqlSugar 使用 SqlCommand 类对 SQL 语句进行执行,并借助 SqlParameters 类封装参数值。

Queryable 模块

Queryable 模块用于实现查询功能,它是 ORM 中最常用的模块之一。该模块封装了对数据表的查询操作,使得开发人员可以通过类似 LINQ 的语法,对数据进行高效、简洁、安全地操作。同时,SqlSugar 还提供了 Filter、Join、GroupBy、OrderBy 和 Select 等方法,可以极大地丰富查询语句的功能。

在 Queryable 模块中,SqlSugar 定义了一些基本的查询方法,包括 First、Single、ToList、ToDataTable 等,这些方法返回的对象都继承自 ISugarQueryable 接口,使得开发人员可以方便地根据需要对查询结果进行转换和处理。

SqlBuilder 模块

SqlBuilder 模块用于构建 SQL 语句,它允许开发人员直接使用字符串操作来构建 SQL 语句,SqlSugar 会自动将字符串转换成可执行的 SQL 语句并执行。

在 SqlBuilder 模块中,SqlSugar 提供了一系列的辅助方法,帮助开发人员构建 SQL 语句。例如,Append 方法用于添加 SQL 片段、AddParameters 方法用于添加 SQL 参数、ExecuteSqlQuery 方法用于执行查询语句等。

Attributes 模块

Attributes 模块包含了 SqlSugar 中定义的特性,其中最常用的是 SugarColumn 特性,用于定义数据表和实体类之间的映射关系。此外,还有 SugarTable、SugarDatabase、SugarFunction 和 SugarParameter 等多个特性,可以用于定义数据表、数据库、函数和参数等信息。在 Attributes 模块中,SqlSugar 使用反射机制获取对象的属性信息,并根据特性信息进行处理。同时,SqlSugar 还充分利用了 C# 中的特性继承性,使得开发人员可以方便地对实体类中的属性进行分类管理和定义。

SqlSugar 的实现原理主要有以下几个方面:

1. 利用反射机制获取实体类的属性信息,并根据这些信息动态生成 SQL 语句。

2. 使用 C# 中的委托机制,消除了开发人员需要手写 SQL 语句的繁琐操作。

3. 通过使用连接字符串,实现了与多种类型的数据库连接,使得开发人员可以轻松地切换数据库类型。

4. 使用缓存技术,可以大大提高数据访问的效率。SqlSugar 内部采用了一种 “三级缓存” 的方式,将实体类数据缓存在内存中,使得在频繁查询数据时,能够快速地返回结果。

SqlSugar 可以与各种对象进行关联映射,使得开发者能够更加方便地操作数据库。

以下是 SqlSugar 的初级用法:

创建实体类

使用 SqlSugar 前需要先创建实体类,并在实体类中定义与数据表中字段相对应的属性,例如:

[SugarTable("Student")]
public class Student
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    
    [SugarColumn(ColumnDataType = "nvarchar", Length = 50, Nullable = false)]
    public string Name { get; set; }

    [SugarColumn(ColumnName = "ClassId")]
    public int? Class { get; set; }
}

以上代码定义了一个名为 “Student” 的实体类,其中 “SugarTable” 特性指定了数据表的名称,而 “SugarColumn” 特性则针对每一个属性进行了映射,包括列名、数据类型、长度、是否允许为空等。

创建数据库连接

在使用 SqlSugar 进行操作前,需要先创建数据库连接,例如:

SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
{
    ConnectionString = "server=localhost;database=MyDatabase;uid=root;pwd=123456",
    DbType = DbType.MySql,
    IsAutoCloseConnection = true,
    InitKeyType = InitKeyType.Attribute
});

以上代码中,使用 ConnectionConfig 指定了数据库连接字符串、数据库类型、是否自动关闭连接和主键类型等信息,创建 SqlSugarClient 后即可对数据库进行操作。

常用操作

SqlSugar 支持大多数常用的数据库操作,例如查询、新增、更新和删除等。以下是一些简单的示例:

查询:

var students = Db.Queryable().ToList();

以上代码中,使用 “Queryable” 方法获取 “Student” 数据表的所有数据,并将结果转换为 List 类型。

新增:

var student = new Student()
{
    Name = "binjie09",
    Class = 1
};
Db.Insertable(student).ExecuteCommand();

以上代码中,定义了一个名为 “student” 的新学生,并使用 “Insertable” 方法将其添加到 “Student” 数据表中。

更新:

Db.Updateable()
    .SetColumns(s => new Student() { Name = "binjie09-update" })
    .Where(s => s.Name == "binjie09")
    .ExecuteCommand();

以上代码中,使用 “Updateable” 方法对 “Student” 数据表进行更新操作,将名称为 “binjie09” 的学生的名称改为 “binjie09-update”。

删除:

Db.Deleteable().Where(s => s.Class == 1).ExecuteCommand();

以上代码中,使用 “Deleteable” 方法对 “Student” 数据表进行删除操作,删除班级为 1 的所有学生。

以上是 SqlSugar 的初级用法,可以帮助您快速入门并实现基本的数据库操作。

以下是 SqlSugar 的一些高级用法:

多表查询

使用 SqlSugar 可以轻松实现多表查询,例如:

var queryable = Db.Queryable((s, c) => new object[]
{
    JoinType.Inner, s.ClassId == c.Id
}).Select((s, c) => new { s.Id, s.Name, ClassName = c.Name });

上述代码中,“Student” 和 “Class” 两个实体类进行了内连接,其中 “Student” 类中的 “ClassId” 属性与 “Class” 类中的 “Id” 属性相关联。

Lambda 表达式

SqlSugar 支持Lambda表达式,可以更加方便地编写查询语句,例如:

var list = Db.Queryable().Where(s => s.Age > 18).ToList();

上述代码中,使用 “Where” 方法对 “Student” 实体类进行了筛选,只返回年龄大于18岁的学生信息。“ToList()” 方法表示将筛选结果转换成List类型。

存储过程

SqlSugar 还支持调用存储过程,例如:

var result = Db.Ado.UseStoredProcedure(() =>
{
    var p1 = new SugarParameter("@Id", 1);
    var p2 = new SugarParameter("@Name", "binjie09");
    var p3 = new SugarParameter("@Age", 20);

    return ("GetStudentInfo", new SugarParameter[] { p1, p2, p3 });
});

上述代码中,使用 “UseStoredProcedure” 方法调用名为 “GetStudentInfo” 的存储过程,并传递三个参数。返回结果为动态类型。

事务处理

SqlSugar 提供了事务处理功能,可以保证多次数据库操作的原子性,例如:

try
{
    Db.Ado.BeginTran();
    //...
    Db.Ado.CommitTran();
}
catch (Exception ex)
{
    Db.Ado.RollbackTran();
}

上述代码中,使用 “BeginTran” 方法开启一个事务,在try语句块中进行多个数据库操作,在发生异常时使用 “RollbackTran” 方法回滚事务,否则使用 “CommitTran” 方法提交事务。

以上是 SqlSugar 的一些高级用法,可以根据具体的需求来选择使用。

官方教程:https://www.donet5.com/Home/Doc。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯