当前位置:   article > 正文

七天.NET 8操作SQLite入门到实战 - 第五天引入SQLite-net ORM并封装常用方法(SQLiteHelper)_.net8 sqlcipher

.net8 sqlcipher

前言

上一章节我们搭建好了EasySQLite的前后端框架,今天我们的主要任务是在后端框架中引入SQLite-net ORM并封装常用方法(SQLiteHelper)。

七天.NET 8操作SQLite入门到实战详细教程

EasySQLite项目源码地址

GitHub地址:GitHub - YSGStudyHards/EasySQLite: 七天.NET 8操作SQLite入门到实战详细教程

SQLite-net介绍

简单、强大、跨平台的 SQLite 客户端和 .NET 的 ORM

SQLite-net提供了以下四个包:

PackageDescriptionPackage Address
sqlite-net-pcl.NET Standard 库https://www.nuget.org/packages/sqlite-net-pcl
sqlite-net-sqlcipher支持加密https://www.nuget.org/packages/sqlite-net-sqlcipher
sqlite-net-static使用平台提供的 sqlite3 的 P/Invokes 的特殊版本https://www.nuget.org/packages/sqlite-net-static
sqlite-net-base使用 SQLitePCLRaw 捆绑包,以便您可以选择自己的提供程序https://www.nuget.org/packages/sqlite-net-base

SQLite-net 设计目标

SQLite-net 被设计为一个快速便捷的数据库层。其设计遵循以下目标:

  • 非常容易与现有项目集成,并在所有 .NET 平台上运行。
  • 对 SQLite 的薄包装,快速高效。(这个库不应该成为查询性能的瓶颈。)
  • 提供非常简单的方法来安全执行 CRUD 操作和查询(使用参数),以及以强类型方式检索这些查询结果。
  • 在不强制更改类的情况下与数据模型一起工作。(包含一个小型的反射驱动 ORM 层。)

安装 sqlite-net-pcl  Nuget包

搜索sqlite-net-pcl,选择最新稳定版本进行安装:

SQLite同步和异步方法帮助类

SQLiteHelper

  1.     /// <summary>
  2.     /// SQLite同步方法帮助类
  3.     /// 作者:追逐时光者
  4.     /// 创建时间:20231130
  5.     /// </summary>
  6.     /// <typeparam name="T"></typeparam>
  7.     public class SQLiteHelper<T> where T : new()
  8.     {
  9.         private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");
  10.         private readonly SQLiteConnection _connection; // SQLite连接对象
  11.         /// <summary>
  12.         /// 构造函数
  13.         /// </summary>
  14.         public SQLiteHelper()
  15.         {
  16.             // 创建SQLite连接对象并打开连接
  17.             _connection = new SQLiteConnection(_databasePath);
  18.             _connection.CreateTable<T>(); // 如果表不存在,则创建该表[不会创建重复的表]
  19.         }
  20.         /// <summary>
  21.         /// 数据插入
  22.         /// </summary>
  23.         /// <param name="item">要插入的数据项</param>
  24.         /// <returns></returns>
  25.         public int Insert(T item)
  26.         {
  27.             return _connection.Insert(item);
  28.         }
  29.         /// <summary>
  30.         /// 数据删除
  31.         /// </summary>
  32.         /// <param name="id">要删除的数据的主键ID</param>
  33.         /// <returns></returns>
  34.         public int Delete(int id)
  35.         {
  36.             return _connection.Delete<T>(id);
  37.         }
  38.         /// <summary>
  39.         /// 数据更新
  40.         /// </summary>
  41.         /// <param name="item">要更新的数据项</param>
  42.         /// <returns></returns>
  43.         public int Update(T item)
  44.         {
  45.             return _connection.Update(item);
  46.         }
  47.         /// <summary>
  48.         /// 根据条件查询记录
  49.         /// </summary>
  50.         /// <param name="predExpr">查询条件</param>
  51.         /// <returns></returns>
  52.         public List<T> Query(Expression<Func<T, bool>> predExpr)
  53.         {
  54.             return _connection.Table<T>().Where(predExpr).ToList();
  55.         }
  56.         /// <summary>
  57.         /// 查询所有数据
  58.         /// </summary>
  59.         /// <returns></returns>
  60.         public List<T> QueryAll()
  61.         {
  62.             return _connection.Table<T>().ToList();
  63.         }
  64.         /// <summary>
  65.         /// 根据条件查询单条记录
  66.         /// </summary>
  67.         /// <param name="predExpr">查询条件</param>
  68.         /// <returns></returns>
  69.         public T QuerySingle(Expression<Func<T, bool>> predExpr)
  70.         {
  71.             return _connection.Table<T>().Where(predExpr).FirstOrDefault();
  72.         }
  73.     }

SQLiteAsyncHelper

  1.     /// <summary>
  2.     /// SQLite异步方法帮助类
  3.     /// 作者:追逐时光者
  4.     /// 创建时间:20231130
  5.     /// </summary>
  6.     /// <typeparam name="T"></typeparam>
  7.     public class SQLiteAsyncHelper<T> where T : new()
  8.     {
  9.         private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");
  10.         private readonly SQLiteAsyncConnection _connectionAsync; // SQLite连接对象
  11.         /// <summary>
  12.         /// 构造函数
  13.         /// </summary>
  14.         public SQLiteAsyncHelper()
  15.         {
  16.             // 创建SQLite连接对象并打开连接
  17.             _connectionAsync = new SQLiteAsyncConnection(_databasePath);
  18.             _connectionAsync.CreateTableAsync<T>(); // 如果表不存在,则创建该表[不会创建重复的表]
  19.         }
  20.         /// <summary>
  21.         /// 数据插入
  22.         /// </summary>
  23.         /// <param name="item">要插入的数据项</param>
  24.         /// <returns></returns>
  25.         public async Task<int> InsertAsync(T item)
  26.         {
  27.             return await _connectionAsync.InsertAsync(item);
  28.         }
  29.         /// <summary>
  30.         /// 数据删除
  31.         /// </summary>
  32.         /// <param name="id">要删除的数据的主键ID</param>
  33.         /// <returns></returns>
  34.         public async Task<int> DeleteAsync(int id)
  35.         {
  36.             return await _connectionAsync.DeleteAsync<T>(id);
  37.         }
  38.         /// <summary>
  39.         /// 数据更新
  40.         /// </summary>
  41.         /// <param name="item">要更新的数据项</param>
  42.         /// <returns></returns>
  43.         public async Task<int> UpdateAsync(T item)
  44.         {
  45.             return await _connectionAsync.UpdateAsync(item);
  46.         }
  47.         /// <summary>
  48.         /// 根据条件查询记录
  49.         /// </summary>
  50.         /// <param name="predExpr">查询条件</param>
  51.         /// <returns></returns>
  52.         public async Task<List<T>> QueryAsync(Expression<Func<T, bool>> predExpr)
  53.         {
  54.             return await _connectionAsync.Table<T>().Where(predExpr).ToListAsync();
  55.         }
  56.         /// <summary>
  57.         /// 查询所有数据
  58.         /// </summary>
  59.         /// <returns></returns>
  60.         public async Task<List<T>> QueryAllAsync()
  61.         {
  62.             return await _connectionAsync.Table<T>().ToListAsync();
  63.         }
  64.         /// <summary>
  65.         /// 根据条件查询单条记录
  66.         /// </summary>
  67.         /// <param name="predExpr">查询条件</param>
  68.         /// <returns></returns>
  69.         public async Task<T> QuerySingleAsync(Expression<Func<T, bool>> predExpr)
  70.         {
  71.             return await _connectionAsync.Table<T>().Where(predExpr).FirstOrDefaultAsync();
  72.         }
  73.     }

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
  • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

【wpsshop】

推荐阅读
相关标签