之前老大说要改变代码中充斥着各种Select的Sql语句字符串的情况,让我尝试着做一个简单的SqlHelper,要具有以下功能:

1.不要在业务代码中暴露DataTable或者DataSet类型;

2.可以完成Select操作,需要支持条件查询,分页,单条记录查询,排序,连表,单个值;

3.可以完成添加单条记录,添加多条记录,修改记录和删除记录;

4.使用过程中要兼容老代码,既允许直接传入Sql;

5.要同时兼容MySql和Sql Server。

我之前写过很多Linq的代码,对那种函数式编程很是喜欢,所以考虑可否按照Lambda表达式来生成Sql。对于这部分的内容有很多,所以我单开一个系列来分享一下我的解决方案:

解决方案的结构如下:

传送门:

SqlHelper简单实现(通过Expression和反射)1.引言

SqlHelper简单实现(通过Expression和反射)2.特性和实体设计

SqlHelper简单实现(通过Expression和反射)3.实体,数据传输对象(DTO)Helper类设计

SqlHelper简单实现(通过Expression和反射)4.对象反射Helper类

SqlHelper简单实现(通过Expression和反射)5.Lambda表达式解析类

SqlHelper简单实现(通过Expression和反射)6.Providor模式(工厂+策略)可配置数据库选择

SqlHelper简单实现(通过Expression和反射)7.MySql数据处理类

SqlHelper简单实现(通过Expression和反射)8.Sql Server数据处理类

SqlHelper简单实现(通过Expression和反射)9.Sql表述对象SqlSession

SqlHelper简单实现(通过Expression和反射)10.使用方式

SqlHelper简单实现(通过Expression和反射)1.引言的更多相关文章

  1. SqlHelper简单实现(通过Expression和反射)9.Sql表述对象SqlSession

    此类是整个SqlHelper的另一个核心,基本思想就是通过EntityHelper,ObjectHelper和ExpressionHelper获取拼接Select语句的全部元素,拼接出完整Select ...

  2. SqlHelper简单实现(通过Expression和反射)5.Lambda表达式解析类

    这个ExpressionHelper类,是整个SqlHelper中,最核心的一个类,主要功能就是将Lambda表达式转换为Sql语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. ...

  3. SqlHelper简单实现(通过Expression和反射)7.MySql数据处理类

    MySql的数据处理类和Sql Server没有太大差别,从思路上来说没有区别,所以此处只是给出代码,不再多加解释了. using System; using System.Configuration ...

  4. SqlHelper简单实现(通过Expression和反射)10.使用方式

    以下是整个SqlHelper的Demo: public Result<List<ArticleDTO>> GetIndexArticleList(int count, int ...

  5. SqlHelper简单实现(通过Expression和反射)6.Providor模式(工厂+策略)可配置数据库选择

    基本思想,将MsSqlDbUtility和MySqlDbUtility设计成单例模式,通过App.config或Web.config进行默认的数据库设置,然后通过DbUtilityFactory获取D ...

  6. SqlHelper简单实现(通过Expression和反射)4.对象反射Helper类

    ObjectHelper的主要功能有: 1.通过反射获取Entity的实例的字段值和表名,跳过自增键并填入Dictionary<string,string>中. namespace RA. ...

  7. SqlHelper简单实现(通过Expression和反射)8.Sql Server数据处理类

    这个类基本上就是调用EntityHelper,ExpressionHelper和ObjectHelper来进行各种完整SQL的拼接操作. using System; using System.Conf ...

  8. SqlHelper简单实现(通过Expression和反射)3.实体,数据传输对象(DTO)Helper类设计

    EntityHelper的主要功能有: 1.通过反射获取DTO的字段,主要提供给在需要从Entity获取数据后,填充给DTO并返回的作用: 通过反射获取PropertyInfo[]对象,然后取出Nam ...

  9. SqlHelper简单实现(通过Expression和反射)2.特性和实体设计

    对于需求中的不要暴露DataTable或DataSet,我想到了设计中常用的对象:实体(Entity),通过实体将数据库中的字段封装成类,这样做不仅使代码更有可读性,维护起来也很方便.同时我自定义了一 ...

随机推荐

  1. 刚新建好的动态网站项目,创建jsp页面就报错

    拿到刚刚可以运行的Eclipse,就马上想敲码了,但一创建项目之后再创建jsp页面就报错= =! 报错的内容大概为缺乏对应的jar包. 我们常用Tomcat为中间体,而他本身是带有开发jsp网站的对应 ...

  2. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha

    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha ...

  3. smartJS 0.1 API 讲解 - PromiseEvent

    上篇简单的介绍smartjs了一些通用方法的api.这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上 ...

  4. (转)java反编译i++和++i问题

    转自:http://blog.csdn.net/junsure2012/article/details/7099222 java字节码指令集:http://www.jb51.net/article/3 ...

  5. js ie 6,7,8 使用不了 firstElementChild

    一. <div> <p>123</p> </div> 在上面这段代码中,如果使用以下js代码 var oDiv=document.getElementB ...

  6. 蓝桥杯 第三届C/C++预赛真题(7) 放棋子(水题)

    今有 6 x 6 的棋盘格.其中某些格子已经预先放好了棋子.现在要再放上去一些,使得:每行每列都正好有3颗棋子.我们希望推算出所有可能的放法.下面的代码就实现了这个功能. 初始数组中,“1”表示放有棋 ...

  7. gcc/g++实战之动态链接库与静态链接库编写

    函数库一般分为静态库和动态库两种. 静态库: 是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了.其后缀名一般为”.a”. 动态库: 与之相反, ...

  8. 【转】node.exe调试JavaScript代码

    node.exe调试JavaScript代码 目的: Console.log可以打印一些信息,光有log还不够,当程序出现问题时通过log可以定位到错误位置,但是当我们想查看错误现场的变量时,log就 ...

  9. [Navicat] 常用快捷键及注意事项

    近来需要同时管理多种类型.多台server的数据库,在经历了各种查询客户端(SSMS, SQLyog, PL/SQL等)的不断切换,ip/user/pwd的反复输入的这种自虐式体验后,实在无法忍受,就 ...

  10. J2EE知识体系(简单整理)