日期:2014-05-16 浏览次数:20473 次
经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:
1、跨数据库:即允许在多个数据库上运行。
2、可读性强:可读性强,入门的成本低,开发人员容易接受。
3、效率高:主要分两部份,开发的效率及运行的效率,在两都之间达到平衡。
4、即时运行:以脚本化的方式运行。
?
实现的方案如下:
1、将SQL92关键字对象化。
2、扩展SQL92标准,支持如:@等关键用法。
?
用例如下:
1、关键字对象化:
UserInfo是一个用户对象:主要属性有用户代码、用户名称、性别、年龄,部门id (外键)等。
Dep是一个部门对象:含部门的相关信息。
isNullNotCondition是一个自定函数,如果部门名称为空,不做为条件。
Select(UserInfo.class,"DEP_NAME")?.from(UserInfo.class)
??????????????????????????????????????????????????????? .innerJour(Dep.class)
????????????????????????????????????????????????????????.on("UserInfo.dep_id=Dep.dep_id");
??????????????????????????????????????????????????????? .where()
????????????????????????????????????????????????????????.and("UserInfo.dep_id=:id")
????????????????????????????????????????????????????????.or(isNullNotCondition("Dep.dep_name=:name"));
?
动态SQL语句:
SQL = "select user_code,user_name,sex,age,dep_id,dep_name "+
???????????" ???????? from UserInfo"+
???????????"????????? innerJour?Dep?"+?
????????? ?"????????? on (user_info.dep_id=Dep.dep_id" +
?????????? "????????? where?userInfo.dep_id=:id"+
?????????? "??????????@isNullNotCondition(and Dep.dep_name=:name)";
封装的集合如下:
1、创建临时表
2、Insert、Update、Delete、Select语句。
3、根据数据库生成Java对象,java对象与数据库一一对应该。
附上SLQ92语法表:
?
Command:?SELECT?query |
Description:?Retrieve?rows?from?a?table?or?view |
???SELECT?[?ALL?|?DISTINCT?[?ON?(?expression?[,?...]?)?]?] ????????expression?[?<![AS]>?name?]?[,...] ????????[?INTO?[?TEMPORARY?|?TEMP?]?[?TABLE?]?new_table?] ????????[?FROM?{table?|?(select?query)}?[?alias?]?[,...]?] ????????[?{{LEFT?|?RIGHT}?[OUTER]?|?NATURAL?|[FULL]?OUTER}?JOIN?table?alias ????????{ON?condition?|?USING(col1,col2,...)}?] ????????[?WHERE?{condition?|?EXISTS?(correlated?subqu
|