前言
上一章節(jié)我們搭建好了EasySQLite的前后端框架,今天我們的主要任務(wù)是在后端框架中引入SQLite-net ORM并封裝常用方法(SQLiteHelper)。
EasySQLite項(xiàng)目源碼地址
SQLite-net介紹
簡(jiǎn)單、強(qiáng)大、跨平臺(tái)的 SQLite 客戶端和 .NET 的 ORM。
SQLite-net提供了以下四個(gè)包:
Package | Description | Package Address |
---|
sqlite-net-pcl | .NET Standard 庫(kù) | https://www.nuget.org/packages/sqlite-net-pcl |
sqlite-net-sqlcipher | 支持加密 | https://www.nuget.org/packages/sqlite-net-sqlcipher |
sqlite-net-static | 使用平臺(tái)提供的 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 設(shè)計(jì)目標(biāo)
SQLite-net 被設(shè)計(jì)為一個(gè)快速便捷的數(shù)據(jù)庫(kù)層。其設(shè)計(jì)遵循以下目標(biāo):
- 非常容易與現(xiàn)有項(xiàng)目集成,并在所有 .NET 平臺(tái)上運(yùn)行。
- 對(duì) SQLite 的薄包裝,快速高效。(這個(gè)庫(kù)不應(yīng)該成為查詢性能的瓶頸。)
- 提供非常簡(jiǎn)單的方法來(lái)安全執(zhí)行 CRUD 操作和查詢(使用參數(shù)),以及以強(qiáng)類型方式檢索這些查詢結(jié)果。
- 在不強(qiáng)制更改類的情況下與數(shù)據(jù)模型一起工作。(包含一個(gè)小型的反射驅(qū)動(dòng) ORM 層。)
安裝 sqlite-net-pcl Nuget包
搜索sqlite-net-pcl
,選擇最新穩(wěn)定版本進(jìn)行安裝:
SQLite同步和異步方法幫助類
SQLiteHelper
/// <summary>
/// SQLite同步方法幫助類
/// 作者:追逐時(shí)光者
/// 創(chuàng)建時(shí)間:2023年11月30日
/// </summary>
/// <typeparam name="T"></typeparam>
public class SQLiteHelper<T> where T : new()
{
private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");
private readonly SQLiteConnection _connection; // SQLite連接對(duì)象
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public SQLiteHelper()
{
// 創(chuàng)建SQLite連接對(duì)象并打開(kāi)連接
_connection = new SQLiteConnection(_databasePath);
_connection.CreateTable<T>(); // 如果表不存在,則創(chuàng)建該表[不會(huì)創(chuàng)建重復(fù)的表]
}
/// <summary>
/// 數(shù)據(jù)插入
/// </summary>
/// <param name="item">要插入的數(shù)據(jù)項(xiàng)</param>
/// <returns></returns>
public int Insert(T item)
{
return _connection.Insert(item);
}
/// <summary>
/// 數(shù)據(jù)刪除
/// </summary>
/// <param name="id">要?jiǎng)h除的數(shù)據(jù)的主鍵ID</param>
/// <returns></returns>
public int Delete(int id)
{
return _connection.Delete<T>(id);
}
/// <summary>
/// 數(shù)據(jù)更新
/// </summary>
/// <param name="item">要更新的數(shù)據(jù)項(xiàng)</param>
/// <returns></returns>
public int Update(T item)
{
return _connection.Update(item);
}
/// <summary>
/// 根據(jù)條件查詢記錄
/// </summary>
/// <param name="predExpr">查詢條件</param>
/// <returns></returns>
public List<T> Query(Expression<Func<T, bool>> predExpr)
{
return _connection.Table<T>().Where(predExpr).ToList();
}
/// <summary>
/// 查詢所有數(shù)據(jù)
/// </summary>
/// <returns></returns>
public List<T> QueryAll()
{
return _connection.Table<T>().ToList();
}
/// <summary>
/// 根據(jù)條件查詢單條記錄
/// </summary>
/// <param name="predExpr">查詢條件</param>
/// <returns></returns>
public T QuerySingle(Expression<Func<T, bool>> predExpr)
{
return _connection.Table<T>().Where(predExpr).FirstOrDefault();
}
}
SQLiteAsyncHelper
/// <summary>
/// SQLite異步方法幫助類
/// 作者:追逐時(shí)光者
/// 創(chuàng)建時(shí)間:2023年11月30日
/// </summary>
/// <typeparam name="T"></typeparam>
public class SQLiteAsyncHelper<T> where T : new()
{
private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");
private readonly SQLiteAsyncConnection _connectionAsync; // SQLite連接對(duì)象
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public SQLiteAsyncHelper()
{
// 創(chuàng)建SQLite連接對(duì)象并打開(kāi)連接
_connectionAsync = new SQLiteAsyncConnection(_databasePath);
_connectionAsync.CreateTableAsync<T>(); // 如果表不存在,則創(chuàng)建該表[不會(huì)創(chuàng)建重復(fù)的表]
}
/// <summary>
/// 數(shù)據(jù)插入
/// </summary>
/// <param name="item">要插入的數(shù)據(jù)項(xiàng)</param>
/// <returns></returns>
public async Task<int> InsertAsync(T item)
{
return await _connectionAsync.InsertAsync(item);
}
/// <summary>
/// 數(shù)據(jù)刪除
/// </summary>
/// <param name="id">要?jiǎng)h除的數(shù)據(jù)的主鍵ID</param>
/// <returns></returns>
public async Task<int> DeleteAsync(int id)
{
return await _connectionAsync.DeleteAsync<T>(id);
}
/// <summary>
/// 數(shù)據(jù)更新
/// </summary>
/// <param name="item">要更新的數(shù)據(jù)項(xiàng)</param>
/// <returns></returns>
public async Task<int> UpdateAsync(T item)
{
return await _connectionAsync.UpdateAsync(item);
}
/// <summary>
/// 根據(jù)條件查詢記錄
/// </summary>
/// <param name="predExpr">查詢條件</param>
/// <returns></returns>
public async Task<List<T>> QueryAsync(Expression<Func<T, bool>> predExpr)
{
return await _connectionAsync.Table<T>().Where(predExpr).ToListAsync();
}
/// <summary>
/// 查詢所有數(shù)據(jù)
/// </summary>
/// <returns></returns>
public async Task<List<T>> QueryAllAsync()
{
return await _connectionAsync.Table<T>().ToListAsync();
}
/// <summary>
/// 根據(jù)條件查詢單條記錄
/// </summary>
/// <param name="predExpr">查詢條件</param>
/// <returns></returns>
public async Task<T> QuerySingleAsync(Expression<Func<T, bool>> predExpr)
{
return await _connectionAsync.Table<T>().Where(predExpr).FirstOrDefaultAsync();
}
}
參考資料
該文章在 2024/8/21 14:52:46 編輯過(guò)