轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)
简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM。解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程序员来说,是非常简单的,其语法特点与Linq to Sql极为相似。不仅实现了完整的Select、Insert、Update、Delete等语句解析器,同时,也实现了Select、where、order by等子句,这些语句与子句均支持导出SQL语句,使得拼接复杂场景SQL语句变得轻松,SqlRepoEx很快其原生数据访问与Dapper不相上下,SqlRepoEx本身支持Sql Server与MySql方言,同时通过SqlRepoEx.Normal支持非方言SQL。SqlRepoEx没侵入性,仅通过简单的几个特性,就能让类与数据库关联起来;
*本系列以静态工厂为例;
*数据来源于Northwind数据库;
*完整的代码见 https://github.com/AzThinker/SqlRepoEx2.0StartGuid https://gitee.com/azthinker/SqlRepoEx2.0StartGuid
五、@ 参数构建
1、对于类属性 ,SqlRepoEx 为IInsertStatement,IUpdateStatement提供了 ParamSql()方法和 ParamSqlWithEntity()方法
(1)、 ParamSql(),是一个简单返回参数语句的方法
var repository = MsSqlRepoFactory.Create<AzProducts>();
var resultUpdate = repository
.Update()
// 注意此处的 ParamSet 方法,此时不需要指定属性的值
// 这为构建完全的 @ 参数 提供了方便
// 特别是在批更新时,最为方便
.ParamSet(p => p.ProductName2, p => p.CategoryID)
.Where(p => p.ProductID == p.ProductID);
Console.WriteLine(resultUpdate.ParamSql());
此句会生成
UPDATE [dbo].[Products]
SET ProductName = @ProductName2, CategoryID = @CategoryID
WHERE (([dbo].[Products].[ProductID] = @ProductID));
// 使用 Dapper 更新
AzProducts products = new AzProducts() { ProductID = 84, ProductName2 = "testvalue100", CategoryID = 7 };
// Dapper 更新
int result = dbConnection.Execute(resultUpdate.ParamSql(), products);
(2) ParamSqlWithEntity()方法,一个返Tupe (string paramsql, TEntity entity)
var repository = MsSqlRepoFactory.Create<AzProducts>();
var resultUpdate = repository
.Update()
// 此处使用 Set 方法,并将属值指定
.Set(p => p.ProductName2, "testvalue234")
.Set(p => p.CategoryID, 5)
.Where(p => p.ProductID == 84);
var ret = resultUpdate.ParamSqlWithEntity();
Console.WriteLine(ret.paramsql);
此句会生成
UPDATE [dbo].[Products]
SET ProductName = @ProductName2, CategoryID = @CategoryID
WHERE (([dbo].[Products].[ProductID] = 84));
同时 Set 方法中的属值会生在一个 AzProducts 类实例,这样为使用 Dapper提供了方便
int result = dbConnection.Execute(ret.paramsql, ret.entity);
2、对于条件语句的 @ 参数
条件语句中,只需要使用
形如:.Where(p => p.ProductID == p.ProductID); 即可产生 WHERE (([dbo].[Products].[ProductID] = @ProductID));
参见上例 1 (1)
总结:
1、对于与Dapper结合使用,SqlRepoEx提供了两种方式,一种是使用 SqlRepoEx.Adapter.Dapper ,采用与其他SqlRepoEx的操作一至的方式来访问数据;二是,采用《最佳实践之Dapper》中的方式,以SQL语句结合Dapper来操作;两种方式可同时并存,不影响使用,具体采用哪形式,由编程人员自行决定。
2、 SqlRepoEx提供了以Lamdba的方式 ,其操作类似于Linq的操作,但更接近于Sql本身的语义顺序
3、参数字段的构建非常方便,减少拼接语句容易出错问题,同时使用 Table,Column等特性,为异构提供了简易的操作;
轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)的更多相关文章
- 轻量ORM-SqlRepoEx (十三)最佳实践
ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...
- 软件设计师【软件工程:软件开发模型、XP极限编程十二最佳实践】
一.软件开发模型 二.XP极限编程十二最佳实践
- 轻量ORM-SqlRepoEx (十)SqlRepoEx Nuget包下载说明
ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...
- Dapper.NET——轻量ORM
Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...
- SqlSugar轻量ORM
蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...
- 采用轻量ServiceMesh实现灰度发布的实践
软件总会有缺陷的,解决问题的同时往往会引入新的问题,关键是看这些问题是否在我们的控制范围内,“灰度发布”就是让问题受控的方法之一. 前言 我们的 CTO 经常说:“研发团队最首要的任务是提供稳定的服务 ...
- Dapper.NET—轻量ORM
Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1 一 ...
- [转] Jenkins Pipeline插件十大最佳实践
[From] http://blog.didispace.com/jenkins-pipeline-top-10-action/ Jenkins Pipeline 插件对于 Jenkins 用户来说可 ...
- 轻量ORM-SqlRepoEx (十四)最佳实践之Dapper(1)
简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ...
随机推荐
- MySQL mysqldump数据导出基本操作
mysqldump mysqldump命令是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 选项 --all-databases, -A:导 ...
- meta name id class 标签的区别
meta https://zhidao.baidu.com/question/2052283721385566387.html name 跟 id 的区别 http://blog.csdn.net/f ...
- data encryption
package com.itheima; import java.util.Scanner; /* * 需求:键盘录入数据,要求数据是四位的整数,现需要对数据进行加密,加密规则如下: * 每位数字都加 ...
- 近期关于CI/CD策略以及git分支模型的思考
近两个月由于个人处于新环境.新项目的适应阶段,没怎么提笔写些文章.中间有好几个想法想记录下来分享,但受限于没有很好的时间段供自己总结思考(也可以总结为间歇性懒癌和剧癌发作),便啥也没有更新.借这个周末 ...
- TCP协议 状态解析和状态统计
一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报 ...
- Python 爬虫练习项目——异步加载爬取
项目代码 from bs4 import BeautifulSoup import requests url_prefix = 'https://knewone.com/discover?page=' ...
- [翻译] JTNumberScrollAnimatedView
JTNumberScrollAnimatedView 本人视频教程系类 iOS中CALayer的使用 效果: Use JTNumberScrollAnimatedView for have a n ...
- C#中IL, CTS, CLR, CLS, JIT含义
1. IL/MSIL (Microsoft Intermediate Language) 微软中间语言 (IL是MSIL的缩写,译为中间语言) 2. CTS (Common Type System ...
- Python学习---面向对象的学习[基础]
面向对象 面向对象的三大特性是指:封装.继承和多态. 说明: Python可以函数式编程,也可以面向对象编程 l 面向过程:根据业务逻辑从上到下写垒代码 l 函数式 :将某功能代码封装到函数中,日后便 ...
- c++ 基类,派生类的类型兼容性
#include <iostream> using namespace std; class CFather { public: void display() const { cout&l ...