首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

推荐一个Dapper扩展库,使得更加轻松构建且安全的SQL查询!

我们都知道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 as Category, sc.Name as Subcategory, p.Name, p.ProductNumber FROM Product p INNER JOIN ProductSubcategory sc ON p.ProductSubcategoryID=sc.ProductSubcategoryID INNER JOIN 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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OUfoVPXzT8IaFchmy_2ZV8iw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券