深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数据库逻辑。
本文将以完整的示例,详细介绍 SQLSugar 的安装、配置和功能使用,适用于 .NET Framework 和 .NET Core 项目。
一、SQLSugar简介
1. 什么是 SQLSugar?
SQLSugar 是一个轻量级的开源 ORM 框架,专注于以下核心功能:
- 简单易用: 通过链式操作简化常见数据库操作。
- 高性能: 优化底层 SQL 执行效率。
- 多数据库支持: 兼容 SQL Server、MySQL、SQLite、PostgreSQL、Oracle 等。
- 功能全面: 支持事务、动态表名、分页、多表联查等高级特性。
2. 使用场景
SQLSugar 适用于以下场景:
- 中小型项目: 快速开发数据库交互模块。
- 动态表结构管理: 需要动态生成或切换表。
- 性能要求高的场景: 适合对 SQL 性能优化有需求的开发者。
二、SQLSugar 的安装
SQLSugar 提供统一的 NuGet 包,无论是 .NET Framework 还是 .NET Core 项目,都直接使用 SqlSugar。
1. 在 .NET Framework 4.6+ 环境安装 SqlSugar
-
使用 NuGet 包管理器安装
打开 Visual Studio,在项目中右键选择“管理 NuGet 程序包”,搜索 SqlSugar 并安装。
注意事项:确保您的项目使用 .NET Framework 4.6 或更高版本,并在 App.config 或 Web.config 文件中正确配置数据库连接字符串。
-
使用 Package Manager Console 安装
在 Visual Studio 的工具菜单中打开 Package Manager Console,输入以下命令:
Install-Package SqlSugar -
使用 .NET CLI 安装
在命令行中运行:
dotnet add package SqlSugar注意: 即使您使用 .NET CLI 安装,SqlSugar 包也完全兼容 .NET Framework 4.6+ 环境。
2. 在 .NET Core 和 .NET 5/6/7/8/9 环境安装 SqlSugarCore
对于基于 .NET Core 和 .NET 5+(包括 .NET 6/7/8/9)的项目,应安装专门的 SqlSugarCore 包。
-
使用 NuGet 包管理器安装
打开 Visual Studio,在项目中右键选择“管理 NuGet 程序包”,搜索 SqlSugarCore并安装。
-
使用 Package Manager Console 安装
在 Visual Studio 的工具菜单中打开 Package Manager Console,输入以下命令:
Install-Package SqlSugarCore -
使用 .NET CLI 安装
在命令行中运行:
dotnet add package SqlSugarCore注意事项:
- SqlSugarCore 是专门为 .NET Core 和 .NET 5/6/7/8/9 构建的轻量级包。
- 确保项目的运行时环境与目标框架一致。
三、SQLSugar 的基本使用教程
1. 数据库上下文配置
创建数据库上下文类
在 SQLSugar 中,通过 SqlSugarClient 管理与数据库的连接。以下示例展示如何创建一个简单的 DbContext 类:
using SqlSugar;public class DbContext
{public SqlSugarClient Db { get; }public DbContext(){Db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=your_password;",DbType = DbType.SqlServer, // 数据库类型IsAutoCloseConnection = true, // 自动关闭连接InitKeyType = InitKeyType.Attribute // 从实体类的特性初始化表结构});// 打印SQL到控制台(仅在调试时使用)Db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine($"SQL: {sql}");};}
}
2. 实体类定义
SQLSugar 支持通过特性映射数据库表和字段。以下示例定义了一个简单的用户表实体类:
using SqlSugar;[SugarTable("Users")] // 指定数据库表名为 "Users"
public class User
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)] // 主键且自增public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }
}
3. 数据库基本操作
以下是使用 SQLSugar 进行增删改查的示例:
插入数据
var db = new DbContext().Db;// 插入单条记录
var user = new User { Name = "Alice", Age = 25 };
db.Insertable(user).ExecuteCommand();// 插入多条记录
var users = new List<User>
{new User { Name = "Bob", Age = 30 },new User { Name = "Charlie", Age = 28 }
};
db.Insertable(users).ExecuteCommand();
查询数据
// 查询单条记录
var user = db.Queryable<User>().First(u => u.Id == 1);// 条件查询多条记录
var users = db.Queryable<User>().Where(u => u.Age > 20).ToList();// 动态条件查询
int ageFilter = 25;
var filteredUsers = db.Queryable<User>().WhereIF(ageFilter > 0, u => u.Age > ageFilter).ToList();
更新数据
// 更新单条记录
var user = new User { Id = 1, Name = "Alice Updated", Age = 26 };
db.Updateable(user).ExecuteCommand();// 条件更新
db.Updateable<User>().SetColumns(u => u.Age == u.Age + 1).Where(u => u.Age < 30).ExecuteCommand();
删除数据
// 按主键删除
db.Deleteable<User>().In(1).ExecuteCommand();// 条件删除
db.Deleteable<User>().Where(u => u.Age > 50).ExecuteCommand();
4. 高级功能
事务管理
SQLSugar 提供了简单的事务管理功能,适合多操作的场景:
var db = new DbContext().Db;
db.Ado.UseTran(() =>
{db.Insertable(new User { Name = "Transaction Test", Age = 20 }).ExecuteCommand();db.Updateable<User>().SetColumns(u => u.Age == 30).Where(u => u.Name == "Transaction Test").ExecuteCommand();
});
动态表名
通过 AS 方法可以动态指定表名:
var tableName = "Users_2024";
var users = db.Queryable<User>().AS(tableName).ToList();
分页查询
SQLSugar 提供了便捷的分页查询方法:
int totalCount;
var pagedUsers = db.Queryable<User>().OrderBy(u => u.Id).ToPageList(1, 10, out totalCount); // 第1页,每页10条
Console.WriteLine($"Total Count: {totalCount}");
四、总结
1. 优点
- 易用性: 链式操作降低了开发复杂度。
- 性能优化: 支持多数据库,底层 SQL 执行效率高。
- 功能齐全: 事务管理、动态表名、多表联查等功能一应俱全。
- 跨平台支持: 兼容 .NET Framework 和 .NET Core。
2. 使用建议
SQLSugar 非常适合以下场景:
- 快速开发: 适用于中小型项目,降低了数据库操作门槛。
- 复杂查询优化: 在需要动态查询或表名动态化的场景下表现出色。
- 多数据库项目: 支持多种主流数据库的无缝切换。
相关文章:
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数…...
数据结构——概念与时间空间复杂度
目录 前言 一相关概念 1什么是数据结构 2什么是算法 二算法效率 1如何衡量算法效率的好坏 2算法的复杂度 三时间复杂度 1时间复杂度表示 2计算时间复杂度 2.1题一 2.2题二 2.3题三 2.4题四 2.5题五 2.6题六 2.7题七 2.8题八 四空间复杂度 1题一 2题二 3…...
浅谈在AI时代GIS的发展方向和建议
在AI时代,GIS(地理信息系统)的发展正经历着深刻的变革,随着人工智能技术的进步,GIS不再仅仅是传统的地图和空间数据处理工具,而是向更加智能化、自动化、精准化的方向发展。作为一名GIS开发工程师ÿ…...
牛客周赛 Round 78 A-C
A.时间表查询! 链接:https://ac.nowcoder.com/acm/contest/100671/A 来源:牛客网 题目描述 今天是2025年1月25日,今年的六场牛客寒假算法基础集训营中,前两场比赛已经依次于 20250121、20250123 举行;而…...
Java I/O 流介绍
Java学习资料 Java学习资料 Java学习资料 一、引言 在 Java 编程中,I/O(Input/Output)流是处理输入和输出操作的核心机制。它允许程序与外部设备(如文件、网络连接、键盘、显示器等)进行数据交互。通过使用 I/O 流&…...
linux 内核学习方向以及职位
### 学习路径 1. 基础阶段: - C语言高级特性 - 指针和内存管理 - 数据结构实现 - 位操作 - 多线程编程 - Linux系统编程 - 文件I/O操作 - 进程管理 - 信号处理 - IPC机制 - Socket编程 - 必备知识 - 操作系统原理 - 计算机体系结构 - …...
HTML-新浪新闻-实现标题-样式1
用css进行样式控制 css引入方式: --行内样式:写在标签的style属性中(不推荐) --内嵌样式:写在style标签中(可以写在页面任何位置,但通常约定写在head标签中) --外联样式…...
【电磁兼容】CE 传导骚扰
一。是什么? 传导骚扰是指电气或电子设备产生的不需要的电磁能量,这些能量通过导线或其他金属路径传播到其他设备或者系统中。这种类型的干扰通常发生在同一电源线路连接的不同装置之间,或者是共享相同布线系统的组件间。 传导骚扰可以分为两…...
能说说MyBatis的工作原理吗?
大家好,我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助; 能说说MyBatis的工作原理吗? MyBatis 是一款流行的持久层框架,它通过简化数据库操作,帮助开发者更高效地与数据库进行交互。MyBatis…...
詳細講一下RN(React Native)中的列表組件FlatList和SectionList
1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...
LabVIEW进行可靠性测试时有哪些常见的问题
在进行LabVIEW开发和测试时,尤其是用于可靠性测试,可能会遇到一些常见的问题。以下是一些常见问题及其解决方法: 1. 数据采集卡与硬件兼容性问题 问题描述:某些数据采集卡(DAQ)与硬件设备的兼容性问题可能…...
MFC程序设计(四)窗口创建机制
钩子函数 钩子属于win32技术,具有优先勾取消息的权利:当一个消息产生时,钩子勾取消息进行处理,然后消息才送回程序 接下来以一个勾取窗口创建消息的钩子为例进行讲解 钩子类型有键盘钩子,鼠标钩子,WH_CBT…...
【JavaEE进阶】Spring留言板实现
目录 🎍预期结果 🍀前端代码 🎄约定前后端交互接口 🚩需求分析 🚩接口定义 🌳实现服务器端代码 🚩lombok介绍 🚩代码实现 🌴运行测试 🎄前端代码实…...
Unity开发一个单人FPS游戏的教程总结
这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏,感兴趣的朋友可以回顾一下。这个系列的文章如下: Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…...
论文速读|Is Cosine-Similarity of Embeddings Really About Similarity?WWW24
论文地址: https://arxiv.org/abs/2403.05440 https://dl.acm.org/doi/abs/10.1145/3589335.3651526 bib引用: inproceedings{Steck_2024, series{WWW ’24},title{Is Cosine-Similarity of Embeddings Really About Similarity?},url{http://dx.doi.o…...
71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果
前言 在前端开发中,地图功能是一个常见的需求。OpenLayers 是一个强大的开源地图库,支持多种地图源和交互操作。本文将介绍如何在 Vue 3 中集成 OpenLayers,并实现按住 Shift 键拖拽、旋转和缩放地图的效果。 实现效果 按住 Shift 键&#…...
PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)
一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…...
250125-package
1. 定义 包就是文件夹,作用是在大型项目中,避免不同人的编写的java文件出现同名进而导致报错;想象一个场景,在一个根目录中,每一个人都有自己的一个java文件夹,他可以将自己编写的文件放在该文件夹里&…...
左右互博02-unidbg主动调用外层so函数
unidbg 代码 ` package com.koohairev.demo;import com.github.unidbg.AndroidEmulator; import com.github.unidbg.LibraryResolver; import com.github.unidbg.Module; import com.github.unidbg.Symbol; import com.github.unidbg.arm.backend.DynarmicFactory; import com.…...
FastExcel的使用
前言 FastExcel 是一款基于 Java 的开源库,旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel,提供性能优化、bug 修复,并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。 FastExcel 的主要功能 高性…...
均值(信息学奥赛一本通-1060)
【题目描述】 给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。 【输入】 输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的…...
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…...
python3+TensorFlow 2.x(三)手写数字识别
目录 代码实现 模型解析: 1、加载 MNIST 数据集: 2、数据预处理: 3、构建神经网络模型: 4、编译模型: 5、训练模型: 6、评估模型: 7、预测和可视化结果: 输出结果ÿ…...
基础项目——扫雷(c++)
目录 前言一、环境配置二、基础框架三、关闭事件四、资源加载五、初始地图六、常量定义七、地图随机八、点击排雷九、格子类化十、 地图类化十一、 接口优化十二、 文件拆分十三、游戏重开 前言 各位小伙伴们,这期我们一起学习出贪吃蛇以外另一个基础的项目——扫雷…...
记录备战第十六届蓝桥杯的过程
1.学会了原来字符串也有比较方法,也就是字符串987 > 98 等等,可以解决拼最大数问题 题目链接:5.拼数 - 蓝桥云课 (lanqiao.cn) 2.今天又复习了一下bfs,感觉还是很不熟练,可能是那个过程我些许有点不熟悉ÿ…...
[操作系统] 深入进程地址空间
程序地址空间回顾 在C语言学习的时,对程序的函数、变量、代码等数据的存储有一个大致的轮廓。在语言层面上存储的地方叫做程序地址空间,不同类型的数据有着不同的存储地址。 下图为程序地址空间的存储分布和和特性: 使用以下代码来验证一下…...
JAVA(SpringBoot)集成Kafka实现消息发送和接收。
SpringBoot集成Kafka实现消息发送和接收。 一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者 君子之学贵一,一则明,明则有功。 一、Kafka 简介 Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,最初由 Link…...
OpenCV:图像处理中的低通滤波
目录 简述 什么是低通滤波? 各种滤波器简介与实现 方盒滤波 均值滤波 中值滤波 高斯滤波 双边滤波 各种滤波的对比与应用场景 相关阅读 OpenCV基础:图像变换-CSDN博客 OpenCV:图像滤波、卷积与卷积核-CSDN博客 简述 低通滤波是一…...
99.17 金融难点通俗解释:归母净利润
目录 0. 承前1. 简述2. 比喻:小明家的小卖部2.1 第一步:计算收到的所有钱2.2 第二步:减去各种支出2.3 第三步:计算能带回家的钱 3. 生活中的例子3.1 好的经营情况3.2 一般的经营情况3.3 不好的经营情况 4. 小朋友要注意4.1 为什么…...
32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)
背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析(1):stdio测试(一) 继续stdio测试的分析,上篇讲到标准IO端口初始化,单从测试内容来说其实很简单,没啥可分析的,但这几篇…...
