给各位聚聚和大大介绍一个开源项目 Expression2Sql(二)
2016-01-22 07:51
387 查看
前一阵子给大家介绍了一个可以将Expression表达式树解析成Transact-SQL的开源项目Expression2Sql。
之后得到了广大读者的一些好评,也使得博主更有动力继续更新下去,然后一些园友也给出了一些极具建设性的意见,也有部分园友反馈了一些bug。最近一段时间,博主也集中精力,抽出一些时间做了一次更新,本篇文章将介绍本次更新的内容。
简单易用,几分钟即可上手使用,因为博主在设计Expression2Sql的时候就尽可能的按照Transact-SQL的语法语义风格来设计,只要调用者熟悉基本的Transact-SQL语法即可瞬间无忧开码,大大降低了学习Expression2Sql的成本,甚至零成本。对象化操作,链式编程,支持多表复杂关联查询,任意组装sql,自动生成表别名,参数化赋值,防止sql注入,支持SQLServer、MySQL、Oracle、SQLite等多数据库,生成极度美观的sql字符串(格式化)等诸多优点。
Expression2Sql的设计初衷就是职责非常单一、干净清爽,纯粹就是输入表达式树,然后经过它的解析之后,便可返回Transact-SQL给调用方。所以它的使用场景主要是用于和第三方的ORM或者是基于ado.net的原生DbHelper帮助类做对接,使其能够支持对象化、表达式树的链式编程。
具体详情可以前往此篇博文一探究竟:《给各位聚聚和大大介绍一个开源项目 Expression2Sql》
Expression2Sql源码托管地址:https://github.com/StrangeCity/Expression2Sql
诸多开源项目收录:/article/5256504.html
感谢大家踊跃提意见,不少园友建议用Expression2Sql打造一个O/R mapping数据访问组件,没错,这也是Expression2Sql的优势。
可以,在下一篇博文中,博主就讲解 Expression2Sql + DbHelper + Mapping = ORM ,最大化解耦拆分成独立的组件。
伪代码如下:
[b]一、在做形参赋值时报错,现已解决。[/b]
[b]二、对于括号优先级的处理,现已支持。[/b]
[b]三、增加Insert方法[/b]
[b]四、给查询字段取别名[/b]
[b]五、提供静态类和实例类的两种调用方式[/b]
Expression2Sql组件的核心对象ExpressionToSql是实例类,调用的时候还得对象实例化,然后通过构造函数注入数据库sql语法分析器。但是博主考虑到很多时候,工作或学习当中,一般单数据库类型居多,所以使用静态类来调用,会非常的方便快捷。于是博主抛砖引玉,封装了基于SQLServer、MySQL、Oracle、SQLite数据库的的静态类。当然调用方可以借鉴这些静态类,自行封装这4种常用数据库之外的静态类。
之后得到了广大读者的一些好评,也使得博主更有动力继续更新下去,然后一些园友也给出了一些极具建设性的意见,也有部分园友反馈了一些bug。最近一段时间,博主也集中精力,抽出一些时间做了一次更新,本篇文章将介绍本次更新的内容。
简单易用,几分钟即可上手使用,因为博主在设计Expression2Sql的时候就尽可能的按照Transact-SQL的语法语义风格来设计,只要调用者熟悉基本的Transact-SQL语法即可瞬间无忧开码,大大降低了学习Expression2Sql的成本,甚至零成本。对象化操作,链式编程,支持多表复杂关联查询,任意组装sql,自动生成表别名,参数化赋值,防止sql注入,支持SQLServer、MySQL、Oracle、SQLite等多数据库,生成极度美观的sql字符串(格式化)等诸多优点。
Expression2Sql的设计初衷就是职责非常单一、干净清爽,纯粹就是输入表达式树,然后经过它的解析之后,便可返回Transact-SQL给调用方。所以它的使用场景主要是用于和第三方的ORM或者是基于ado.net的原生DbHelper帮助类做对接,使其能够支持对象化、表达式树的链式编程。
具体详情可以前往此篇博文一探究竟:《给各位聚聚和大大介绍一个开源项目 Expression2Sql》
Expression2Sql源码托管地址:https://github.com/StrangeCity/Expression2Sql
诸多开源项目收录:/article/5256504.html
感谢大家踊跃提意见,不少园友建议用Expression2Sql打造一个O/R mapping数据访问组件,没错,这也是Expression2Sql的优势。
可以,在下一篇博文中,博主就讲解 Expression2Sql + DbHelper + Mapping = ORM ,最大化解耦拆分成独立的组件。
伪代码如下:
public static List<T> Query<T>(ExpressionToSql<T> expression) { string sql = expression.Sql; DataTable dt = DbHelper.ExecuteDataTable(sql, expression.DbParams); List<T> list = Mapping.ToListEntity<T>(dt); return list; }
[b]一、在做形参赋值时报错,现已解决。[/b]
[b]二、对于括号优先级的处理,现已支持。[/b]
[b]三、增加Insert方法[/b]
[b]四、给查询字段取别名[/b]
[b]五、提供静态类和实例类的两种调用方式[/b]
Expression2Sql组件的核心对象ExpressionToSql是实例类,调用的时候还得对象实例化,然后通过构造函数注入数据库sql语法分析器。但是博主考虑到很多时候,工作或学习当中,一般单数据库类型居多,所以使用静态类来调用,会非常的方便快捷。于是博主抛砖引玉,封装了基于SQLServer、MySQL、Oracle、SQLite数据库的的静态类。当然调用方可以借鉴这些静态类,自行封装这4种常用数据库之外的静态类。
相关文章推荐
- MySql不同版本安装
- [数据库] SQL查询语句表行列转换及一行数据转换成两列
- iOS Sqlite3 Demo 及 FMDB Demo
- mysql笔记02 创建高性能的索引
- Nodejs+Extjs+Mongodb开发第一天 Nodejs环境搭建
- oracle case when 语句
- Oracle异机恢复处理
- SQL Server中避免触发镜像SUSPEND的N种方法
- MySQL中由load data语句引起死锁的解决案例
- 详解MySQL中的死锁情况以及对死锁的处理方法
- 数据库Oracle学习资料
- Mysql分区技术 --创建分区表
- java 并发插入数据到oracle
- 自定义SQL函数 实现SPlit字符截取功能
- Oracle数据操作之默认0为' '
- 十步完全理解SQL
- 使用TRY CATCH进行SQL Server异常处理
- mysql 用一个表的一列,去更新另一表的一列
- 使用python操作Memcache、Redis、RabbitMQ、
- 使用Navicat远程管理OpenShift的数据库