DSE 动态SQL引擎

驱动力

开发人员在面对一个新业务模块时,习惯将一个业务分解为多个增、删、改、查操作以及事务操作。我们不难发现大多数业务系统使用查询操作的比重很大,而且业务系统的复杂也体现在查询操作,这些复杂往往表现在多表关联查询和动态查询条件查询上。在开源界IbatisHibernate等技术框架也对单表的动态条件查询做了很好的支持,但是对于多表的联合查询的动态条件查询还未支持,因此DSE的概念产生。SQL引擎接受页面的查询参数,根据SQL模板的去自动匹配并最终生成SQL语句。

DSE 组件架构

        DSE 机构图

1.      View

WebView交互组件,主要处理从View层传递到DSE引擎时的不匹配性。View采纳了OGNL方案。并且在OGNL的基础上,构建了OGNLValueStack的机制,从而比较完美的解决了数据流转中的不匹配性。

2.      SQL build

根据SQL 模板和页面的请求条件动态生成SQL语句。

3.      SQL Execute 

根据SQL build组件生产的SQL语句,然后根据前台页面查询条件对应类型匹配变量,并使用JDBC 的绑定变量API去 执行SQL

4.      Result

处理放回结果,并发给ServerContext

5.      Reader

读取SQL模板中的信息,将实例化的SQL模板放入 Context DSE中。

6.      SQL Template

SQL模板是动态SQL组装SQL预警的根据,SQL模板包含:基础SQL模板、条件类型配置信息两部分信息。

7.      Context DSE

存储SQL 模板信息。在DynamicSqlEngine启动时,将SQL模板存储在Context DSE 中。

8.      DynamicSqlEngine

DynamicSqlEngine 组件是整个引擎的灵魂,负责各个组件的调度,同时负责整个引擎日志记录和异常处理功能。下面是DynamicSqlEngine 引擎的工作原理:WebContext启动是,调用Reader组件读取SQLTemplate,并加载到Context中;当页面有查询请求后,由View组件封装数据,DSE组装动态组装SQL;组装完成后交给SE组件去执行;最后将SE结构给Result组件,放回给页面(Servlet Context;View 获取业务熟悉,并将页面属性映射到 Context 中。

特性

1.      动态构造sql条件语句,提供sql拼接与使用占位符两种方式

2.      采用绑定变量的形式

3.      数据类型的修饰

4.      SQL注入攻击的防范

 

项目详细发布地址:

http://code.google.com/p/worldeasy/

 

这是我的关于动态SQL引擎的设计思路,请大家给些建议。目前代码正在完善中,更多的请关注google code 的进度

备注:

1.      DSE

2.      动态条件查询:查询的条件是变化的。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值