经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:
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项目,大家可以关注一下。
分享到:
相关推荐
4. **集成性**:当由应用程序调用时,存储过程像应用程序的一部分一样运行。 然而,存储过程也存在一些缺点: 1. **调用限制**:只能通过`CALL`语句调用,结果集不能直接被`SQLStatement`使用。 2. **状态独立**:...
这种方式简化了跨数据库查询的操作,提高了数据访问的透明度。 **3. 分布式事务** 分布式事务是指涉及两个或多个数据库节点的事务。为了确保数据的一致性、隔离性和持久性,分布式事务需要在所有参与的数据库节点上...
- **Web应用模块**:PowerBuilder提供了专门的Web应用模块,使得Web服务能够像客户端一样向PowerBuilder服务器应用提出请求。 - **服务器端处理**:服务器端应用接收到请求后,进行必要的数据处理或查询操作,并将...
随着现代工业设计与制造技术的发展,计算机辅助设计(CAD)与计算机辅助工程(CAE)系统已成为产品开发过程中不可或缺的重要工具。CAD技术主要用于加快设计速度、缩短设计周期、改善产品造型和工程绘图质量;而CAE则...
4. **执行SQL操作**:一旦数据库被初始化,就可以像使用普通SQLite一样进行CRUD(创建、读取、更新、删除)操作,但所有的数据都会在传输过程中自动加密和解密。 5. **关闭数据库**:在不再需要数据库时,记得正确...
1. **ODBC技术实现跨数据库数据交换**: - 通过ODBC技术,GeoSpace平台实现了SQL Server 2000数据库与FoxPro数据库之间的数据交换。 - 这种技术的应用解决了不同数据库之间的兼容性问题,确保了解释结果能够准确...
- **独立运行**:Spring Boot可以像普通Java应用一样独立运行在命令行环境之中。 - **嵌入式容器**:Spring Boot可使用如Tomcat、Jetty或Undertow等嵌入式Servlet容器。 - **快速部署**:由于使用了嵌入式的...
它允许用户对整个数据库系统有一个统一的视角,就好像数据都存储在一个单一的数据库中一样。SQL Server利用分布式查询和视图实现全局视图,例如,可以使用联结服务器和OPENROWSET函数来查询和访问不同数据源的数据。...
Cassandra存储引擎为MariaDB用户提供了独特的价值,尤其是在需要跨数据库系统操作数据的场景下。它不仅简化了数据访问过程,还提高了数据处理的灵活性。然而,正确理解和应用数据映射策略对于充分发挥其潜力至关重要...
它有三种类型:`Statement`、`PreparedStatement`和`CallableStatement`,分别用于执行普通SQL语句、预编译SQL语句和存储过程调用。 4. **ResultSet**:当执行查询时,结果将被封装到`ResultSet`对象中,它可以像...
- **统一类型系统**:所有类型都从`System.Object`派生,这意味着所有的类型都可以像对象一样进行操作。 - **版本兼容**:通过.NET平台提供的装配件管理机制,可以有效地解决版本兼容问题。 - **支持网络编程新标准*...
4) 数据库设计:使用MySQL数据库存储数据,具有高可用性和良好的扩展性。 5) 用户体验:设计简洁友好的用户界面,便于用户快速查找和购买图书。 6) 功能模块化:系统功能包括用户登录、商品浏览、购买、上架等,模块...
它可以跨网络调用远程对象的方法,就像本地调用一样。 - **应用场景**:RMI主要用于实现分布式应用程序中的远程对象调用。 - **与其他技术的交互**:RMI通常与EJBs结合使用,以实现远程EJBs的调用。 5. **JSP ...
用户需求分析旨在理解用户对系统的期望,而数据库设计与实现则是为了支持这些功能的数据存储和检索。 2. **系统总体架构**:论文介绍了采用MVC(Model-View-Controller)设计模式,这是一种常见的软件设计模式,...
- **数据库**:存储工作流状态和数据。 - **接口**:允许外部系统与工作流交互。 - **管理工具**:提供监控和管理功能。 #### 总结 通过本章的学习,读者应该已经对工作流的概念有了深入的理解,并了解了如何利用...