當前位置: 妍妍網 > 碼農

推薦一個Dapper擴充套件庫,使得更加輕松構建且安全的SQL查詢!

2024-03-05碼農

我們都知道Dapper是一個非常好用的ORM框架,它對 ADO.NET的簡單封裝,使得開發者可以更加高效、快速地與資料庫進行互動。

今天推薦一個 Dapper的擴充套件庫,讓你 Dapper使用更加簡單、方便。

01

計畫簡介

DapperQueryBuilder是擴充套件庫,它增強了Dapper的功能,特別是關於動態SQL查詢和命令的構建。它提供了字串插值和Fluent API的操作方式,讓我們構建復雜的動態查詢變得更加直觀和簡單,並且沒有SQL註入的風險。

02

使用方法與範例

1、 字串插值

//Dapper寫法string productName = "%Computer%";int subCategoryId = 10;//Dapper寫法:傳入參數值var products = cn .Query<Product>($@" SELECT * FROM Product WHERE Name LIKE @productName AND ProductSubcategoryID = @subCategoryId ORDER BY ProductId",new { productName, subCategoryId }); //DapperQueryBuilder:直接在查詢語句插入值var products = cn .QueryBuilder($@" SELECT * FROM Product WHERE Name LIKE {productName} AND ProductSubcategoryID = {subCategoryId} ORDER BY ProductId" ).Query<Product>();

2、簡化程式碼量,以下是2者的對比

//Dapper程式碼量:需要定義SQL語句、參數列物件var dynamicParams = new DynamicParameters();string sql = "SELECT * FROM Product WHERE 1=1";sql += " AND Name LIKE @productName"; dynamicParams.Add("productName", productName);sql += " AND ProductSubcategoryID = @subCategoryId"; dynamicParams.Add("subCategoryId", subCategoryId);var products = cn.Query<Product>(sql, dynamicParams);//DapperQueryBuilder:字串插值的方式,更加直觀而且程式碼量更少var query = cn.QueryBuilder($"SELECT * FROM Product WHERE 1=1");query += $"AND Name LIKE {productName}"; query += $"AND ProductSubcategoryID = {subCategoryId}"; var products = query.Query<Product>();

3、動態查詢

查詢條件

//其中 /**where**/ 為查詢條件var q = cn.QueryBuilder($@" SELECT ProductId, Name, ListPrice, Weight FROM Product /**where**/ ORDER BY ProductId ");//自動添加查詢條件至查詢q.Where($"ListPrice <= {maxPrice}");q.Where($"Weight <= {maxWeight}");q.Where($"Name LIKE {search}");//執行var products = q.Query<Product>();

or 和 and查詢條件

var q = cn.QueryBuilder($@" SELECT ProductId, Name, ListPrice, Weight FROM Product /**where**/ ORDER BY ProductId ");//Filters.FiltersType可以指定OR、And等方式var priceFilters = new Filters(Filters.FiltersType.OR){new Filter($"ListPrice >= {minPrice}"),new Filter($"ListPrice <= {maxPrice}")};//為And查詢條件q.Where("Status={status}");//為And查詢條件q.Where(priceFilters);//執行var products = q.Query<Product>();

in查詢條件

var q = cn.QueryBuilder($@"SELECT c.Name asCategory, sc.Name as Subcategory, p.Name, p.ProductNumberFROM Product pINNERJOIN ProductSubcategory sc ON p.ProductSubcategoryID=sc.ProductSubcategoryIDINNERJOIN ProductCategory c ON sc.ProductCategoryID=c.ProductCategoryID");var categories = new string[] { "Components", "Clothing", "Acessories" };q += $"WHERE c.Name IN {categories}";

4、鏈式的

var q = cn.FluentQueryBuilder() .Select($"ProductId") .Select($"Name") .Select($"ListPrice") .Select($"Weight") .From($"Product") .Where($"ListPrice <= {maxPrice}") .Where($"Weight <= {maxWeight}") .Where($"Name LIKE {search}") .OrderBy($"ProductId");var products = q.Query<Product>();

以上是部份範例,此擴充套件庫,還有其他非常多的功能,大家感興趣的可以查閱計畫文件。

03

計畫地址

https://github.com/Drizin/DapperQueryBuilder

覺得好看 點個在看👇