`
easyworld
  • 浏览: 110679 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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.      动态条件查询:查询的条件是变化的。

 

 

  • 大小: 17.3 KB
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics