首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

结论:小弟我们需不需要像存储过程一样的跨数据库过程

2012-09-14 
结论:我们需不需要像存储过程一样的跨数据库过程经过一段时间的思考以及对所开发过项目的总结,最终下了结

结论:我们需不需要像存储过程一样的跨数据库过程

经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:

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?subquery)}?]

????????[?GROUP?BY?column?[,...]?]

????????[?HAVING?condition?[,...]?]

????????[?{?UNION?[?ALL?]?|?INTERSECT?|?EXCEPT?|?MINUS?}?select?]

????????[?ORDER?BY?{column?|?int}?[?ASC?|?DESC?|?USING?operator?]?[,...]?]

????????[?FOR?UPDATE?[?OF?class_name?[,...]?]?]

????????LIMIT?{?count?|?ALL?}?[?{?OFFSET?|?,}?start?]

Command:?DELETE

Description:?Removes?rows?from?a?table

???DELETE?FROM?table?[?WHERE?condition?]

<!--EndFragment-->

Command:?INSERT

Description:?Inserts?new?rows?into?a?table

???INSERT?INTO?table?[?(?column?[,?...]?)?]

????????{?VALUES?(?expression?[,?...]?)?|?SELECT?query?}

?

?

Command:?UPDATE

Description:?Replaces?values?of?columns?in?a?table

???UPDATE?table?SET?col?=?expression?[,...]

????????[?FROM?fromlist?]

????????[?WHERE?condition?]

?

最近一段时间终于发现了一个项目,与本人的想法十分附合,只不够它的语法恶心的点。

jOOQ项目,大家可以关注一下。

热点排行