此类是整个SqlHelper的另一个核心,基本思想就是通过EntityHelper,ObjectHelper和ExpressionHelper获取拼接Select语句的全部元素,拼接出完整Select语句. using System.Collections.Generic; using RA.DataAccess.Common; namespace RA.DataAccess { public partial class SqlSession<T> { public SqlSession()…
之前老大说要改变代码中充斥着各种Select的Sql语句字符串的情况,让我尝试着做一个简单的SqlHelper,要具有以下功能: 1.不要在业务代码中暴露DataTable或者DataSet类型: 2.可以完成Select操作,需要支持条件查询,分页,单条记录查询,排序,连表,单个值: 3.可以完成添加单条记录,添加多条记录,修改记录和删除记录: 4.使用过程中要兼容老代码,既允许直接传入Sql: 5.要同时兼容MySql和Sql Server. 我之前写过很多Linq的代码,对那种函数式编程很…
数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参数化,正是本文想说的重点)强制模式就是将adhoc SQL强制参数化,避免每次运行的时候因为参数值的不同而重编译,这里不详细说明. 这首先要感谢“潇湘隐者”大神的提示, 当时也是遇到一个实际问题, 发现执行计划对数据行的预估,怎么都不对,有观察到无论怎么改变参数,SQL语句执行前都没有重编译,疑惑了…
很多程序员认为SQL是一头难以驯服的野兽.它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式.命令式语言. 面向对象语言甚至函数式编程语言(虽然有些人觉得SQL 还是有些类似功能). 我每天都写SQL,我的开源软件JOOQ中也包含SQL.因此我觉得有必要为还在为此苦苦挣扎的你呈现SQL的优美!下面的教程面向于: 已经使用过但没有完全理解SQL的读者 已经差不多了解SQL但从未真正考虑过它的语法的读者 想要指导他人学习SQL的读者 本教程将重点介绍SELECT 语句.其他…
简单十步让你全面理解SQL 很多程序员认为SQL是一头难以驯服的野兽.它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式.命令式语言. 面向对象语言甚至函数式编程语言(虽然有些人觉得SQL 还是有些类似功能). 我每天都写SQL,我的开源软件JOOQ中也包含SQL.因此我觉得有必要为还在为此苦苦挣扎的你呈现SQL的优美!下面的教程面向于: 已经使用过但没有完全理解SQL的读者 已经差不多了解SQL但从未真正考虑过它的语法的读者 想要指导他人学习SQL的读者 本教程将重点介…
最近对接一个接口,需要通过xml序列化成实体后添加额外信息后批量插入数据库,需要手动拼sql.因为涉及多张表,拼凑很麻烦而且容易出错,所以写了两个工具方法来生成sql,先写到博客里面,以便以后不时之需. 直接上工具方法,是通过反射机制来拼凑的sql语句,EF底层实现原理差不多. 1.实体生成Insert语句 /// <summary> /// 通过反射生成sql语句 /// </summary> /// <typeparam name="T"><…
Mybatis反射修改SQL值 某一些情况下我们需要动态的改变Mybtis的执行的sql语句,有两种方法:1)使用拦截器,2)使用反射,拦截器的比较简单点,这里使用反射实现一次,有一点小坑,记录一下: 特别说明:环境配置就不列出来了,下面的所有操作是假设spring已经整合好了mybatis的基础上的.具体的代码连接见文章结尾: 重点在于org.apache.ibatis.builder.StaticSqlSource.getBoundSql(Object) @Override public B…
这个ExpressionHelper类,是整个SqlHelper中,最核心的一个类,主要功能就是将Lambda表达式转换为Sql语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. 0x01基本 在Sql语句中,主要由表名,字段,条件语句等元素组成,而这些元素中,表名,字段可以由实体表示出来,条件语句可以由Lambda表达式表现出来. 在Sql语句中,条件语句可以说是Select中的核心,其中很多功能和Lambda中提供的方法很相似,比如: 实体:…
MySql的数据处理类和Sql Server没有太大差别,从思路上来说没有区别,所以此处只是给出代码,不再多加解释了. using System; using System.Configuration; using MySql.Data.MySqlClient; using RA.DataAccess.Common; namespace RA.DataAccess.MySqlDbUtility { public partial class DbUtility : IDbUtility { pri…
以下是整个SqlHelper的Demo: public Result<List<ArticleDTO>> GetIndexArticleList(int count, int userID) { var exp = DbUtilityFactory.GetDbUtility().GetSqlExpression<ArticleEntity>(); exp.Where(a => a.userID == userID); exp.OrderByDescending(a…