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

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

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项目,大家可以关注一下。

猜你喜欢

转载自weedria.iteye.com/blog/1267826