CN101110030A - 基于java的数据库持久层的开发方法 - Google Patents
基于java的数据库持久层的开发方法 Download PDFInfo
- Publication number
- CN101110030A CN101110030A CNA200710130907XA CN200710130907A CN101110030A CN 101110030 A CN101110030 A CN 101110030A CN A200710130907X A CNA200710130907X A CN A200710130907XA CN 200710130907 A CN200710130907 A CN 200710130907A CN 101110030 A CN101110030 A CN 101110030A
- Authority
- CN
- China
- Prior art keywords
- database
- java
- result
- jdbcutils
- data base
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
基于JAVA的数据库持久层开发方法:采用面向对象的设计模式,将数据库的持久层抽象出来,将Java与数据库进行交互的JDBC封装并抽象为一个单一的接口,将相同的操作封装为模板;并且应用策略模式,根据客户端的需要动态处理结果数据;并且作为客户端快速的访问数据库的一个简单的接口。所述数据库操作封装的方法是:封装了JDBC API各种数据库的操作,并模板化了JDBC中关于数据库交互中容易重复的编码;结果处理方法:根据客户端不同的需要,扩展数据结果集处理类;根据页面展示的不同需求,将结果数据集处理为List、Map或者Bean的集合返回;并辅助JDBCUtils工作,提供批量操作参数,查询语句缓存。
Description
技术领域
本发明涉及数据库交互工具,特别是一种基于JAVA的数据库持久层开发方法和工具。
背景技术
随着B/S结构的系统被日益广泛的使用,Java语言以其适合网络程序开发的特性也被广泛采用。对于大型的系统,数据库操作是必不可少的,Java语言提供了一套JDBC API同数据库进行交互的工具JDBC。但是JDBC的操作和使用繁琐,开发人员常常需要编写很多代码只是为了处理数据库相关的交互,并且这个工作所涉及的代码往往大同小异。真正涉及到的数据处理工作往往很少。有鉴于此,为了提高开发效率,出现了各种基于JDBC之上的数据库持久层工具。例如Hibernate、iBatis、JDO等。但是,这些持久层工具为了适应繁多的数据库类型及通用性,不免在性能、资源上有所牺牲,在某种程度上属于重量级的持久化工具。使用其进行开发的代价大和学习曲线也是有一定的工作量。因此需要一种轻量级的,便捷的开发工具。
发明内容
本发明目的是:为了解决现有技术中存在上述问题,本发明提供了一种轻量级、便捷和具有可扩展性的基于JAVA的数据库持久层开发方法和工具JDBCUtils,尤其是利用JDBC工具对数据库的数据处理提供新的手段。
具体技术技术方案是:基于JAVA的数据库持久层的开发方法,基于JAVA的数据库持久层开发方法:采用面向对象的设计模式,将数据库的持久层抽象出来,将Java与数据库进行交互的JDBC(JDBC API)封装并抽象为一个单一的接口,将相同的操作封装为模板;并且应用策略模式,根据客户端的需要动态处理结果数据;并且作为客户端快速的访问数据库的一个简单的接口。
所述数据库操作封装的方法是:封装了JDBC API各种数据库的操作,并模板化了JDBC中关于数据库交互中容易重复的编码;结果处理方法:根据客户端不同的需要,扩展数据结果集处理类;根据页面展示的不同需求,将结果数据集处理为List、Map或者Bean的集合返回;辅助方法;辅助JDBCUtils工作,提供批量操作参数,查询语句缓存。
对于客户端来说,JDBCUtils是一个简单的接口,可以通过JDBCUtils方便快速的访问数据库。本发明屏蔽了JDBC操作的繁琐设置和结果处理操作,本发明包括数据库操作封装的方法、结果处理方法及辅助方法;相应工具框架主要分成3个部分:数据库操作封装类、结果处理类及辅助类。
本发明效果:相对与现有技术,本发明在使用过程中做到了轻量级、便捷、可扩展,圆满的解决了问题。
附图说明
图1是本发明系统中使用JDBCUtils的结构
图2是本发明JDBCUtils的设计类图
图3是本发明JDBCUtils时序图
具体实施方式
本发明基本的技术思想是利用设计模式和面向对象的概念,将数据库持久层抽象出来,把Java基本的JDBC封装并抽象为一个单一的接口,屏蔽了JDBC操作的繁琐设置和结果处理操作,将相同的操作封装为模板方法,并且应用策略模式,可以根据客户端的需要动态处理结果数据。对于客户端来说,JDBCUtils是一个简单的接口,可以通过JDBCUtils方便快速的访问数据库。在使用JDBCUtils时,直接将其部署在想应用的WEBLOGIC服务器上即可。
主要构成
参见附图2可知,JDBCUtils包含JDBCUtils、SqlBuf、BatchParam三个主要类,以及ResultSetHandler接口及其实现类ListResultSetHandler、MapListRSHandler、OptionListRSHandler、OptionsResultSetHandler、SingleStringRSHandler。
JDBCUtils类封装了和JDBC数据库做相关的方法,并持有一个ResultSetHandler接口的实例对象,在具体使用时委托具体的ResultSetHandler实现处理数据结果集。
SqlBuf和BatchParam为批量操作提供相应的支持。
使用方法:JDBCUtils的使用见如下示例。
public static void main(String[]args){
Connection conn=DbConn.getConn(′);
try{
//例一
//直接传递参数″ta″,new Integer(1)
String sql=″SELECI*FROM tab_test WHERE a=?and b=?″;
List list=(List)JDBCUtils.query(conn,sql,″ta″,new Integer(1),
new ListResultSetHandler());
list=(List)JDBCUtils.query(conn,sql,new Object[]{″tttt″,
new Integer(1)},new ListResultSetHandler());
//例二
sql=″update tab_test set a=?where b=?″;
JDBCUtils.update(conn,sql,new Object[]{″12121″,
new Integer(2005)});
conn.commit();
//例子三,使用一个匿名类来直接处理ResultSet
final StringBuffer curDate=new StringBuffer(′);
sql=″select to_char(sysdate,′yyyymmdd′)from dual″;
JDBCUtils.query(conn,sql,new ResultSetHandler(){
public Object handle(ResultSet rs)throws SQLException{
while(rs.next()){
curDate.append(rs.getString(1));
}
return null;
}
});
}catch(SQLException e){
e.printStackTrace();
}finally{
JDBCUtils.close(conn);
1、如以上代码示例,所有的数据库操作都通过JDBCUtils这个接口来进行,应用程序不需要关心具体的JDBC API,只需要提供符合业务逻辑的SQL和Connection即可。即通过JDBCUtils这个单一接口来与数据库交互。
2、一般JavaAPI数据库操作都会进行如下操作:获取连接,建立Statement或者PreparedStatement,设置SQL参数,执行SQL语句、返回执行结果、处理执行结果。这些操作步骤都是一致的,只是执行不同的SQL语句,设置不同的SQL参数,因此,JDBCUtls将这些步骤封装成模板方法,客户端程序只需调用,并传入不同的SQL语句和参数即可。
3、如代码示例一,将ListResultSetHandler在调用时传给JDBCUtils,那么在获取到查询的数据集ResultSet后,JDBCUtls将委托ListResultSetHandler对ResultSet中的数据进行解析,并将其存储为List结构返回给调用的客户端。如果客户端希望返回的结果集是Map,则可在调用是传如MapResultSetHandler,将结果数据集转换为Map并返回给调用客户端。
4、如示例代码三,对于非常简单的结果处理,可以直接在调用JDBCUtils时使用匿名内部类,即时对ResultSetHandler进行扩展,得到自己想要的处理结果。
5、如果是比较复杂的结果集,则可以开发一个新的类来进行扩展,这个类只需实现ResultSetHandler接口的handle方法即可。比如想将结果集处理为一个TreeMap,则可开发一个TreeMapResultSetHandler类,并在handle方法中将ResultSet数据集转换为TreeMap。新增一个类,对已有的程序代码不造成任何的影响,很好的符合了面向对象编程中的开闭原则。
6、辅助类如SqlBuf是提供SQL语句的缓存功能,用来提高效率和节省内存。BatchParam在JDBCUtils执行批量的update和insert操作时,为其提供批量参数的存储功能。
Claims (8)
1.基于JAVA的数据库持久层开发方法:其特征是采用面向对象的设计模式,将数据库的持久层抽象出来,将Java与数据库进行交互的JDBC(JDBC API)封装并抽象为一个单一的接口,将相同的操作封装为模板;并且应用策略模式,根据客户端的需要动态处理结果数据;并且作为客户端快速的访问数据库的一个简单的接口。
2.根据权利要求1所述基于JAVA的数据库持久层开发方法,其特征是所述数据库操作封装的方法是:封装了JDBC API各种数据库的操作,并模板化了JDBC中关于数据库交互中容易重复的编码;结果处理方法:根据客户端不同的需要,扩展数据结果集处理类;根据页面展示的不同需求,将结果数据集处理为List、Map或者Bean的集合返回;辅助方法;辅助JDBCUtils工作,提供批量操作参数,查询语句缓存。
3.根据权利要求1所述基于JAVA的数据库持久层开发方法,其特征是应用策略模式的方法是:所有的数据库操作都通过JDBCUtils这个接口来进行,应用程序只需要提供符合业务逻辑的SQL和Connection即可;即通过JDBCUtils这个单一接口来与数据库交互。
4.根据权利要求1所述基于JAVA的数据库持久层开发方法,其特征是JavaAPI数据库操作步骤是:获取连接,建立Statement或者PreparedStatement,设置SQL参数,执行SQL语句、返回执行结果、处理执行结果。
5.根据权利要求4所述基于JAVA的数据库持久层开发方法,其特征是JavaAPI数据库操作步骤是:
将ListResultSetHandler在调用时传给JDBCUtils,在获取到查询的数据集ResultSet后,JDBCUtls将委托ListResultSetHandler对ResultSet中的数据进行解析,并将其存储为List结构返回给调用的客户端;如果客户端要求返回的结果集是Map,则在调用MapResultSetHandler,将结果数据集转换为Map并返回给调用客户端。
6.根据权利要求4所述基于JAVA的数据库持久层开发方法,其特征是JavaAPI数据库操作步骤是:对于非常简单的结果处理,直接在调用JDBCUtils时使用匿名内部类,即时对ResultSetHandler进行扩展,得到想要的处理结果。
7.根据权利要求4所述基于JAVA的数据库持久层开发方法,其特征是JavaAPI数据库操作步骤是:对比较复杂的结果集,则开发一个新的类来进行扩展,这个类只需实现ResultSetHandler接口的handle方法。
8.根据权利要求4所述基于JAVA的数据库持久层开发方法,其特征是辅助方法是:由SqlBuf提供SQL语句的缓存功能,用来提高效率和节省内存;BatchParam在JDBCUtils执行批量的update和insert操作时,为其提供批量参数的存储功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710130907XA CN101110030A (zh) | 2007-08-23 | 2007-08-23 | 基于java的数据库持久层的开发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710130907XA CN101110030A (zh) | 2007-08-23 | 2007-08-23 | 基于java的数据库持久层的开发方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101110030A true CN101110030A (zh) | 2008-01-23 |
Family
ID=39042113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200710130907XA Pending CN101110030A (zh) | 2007-08-23 | 2007-08-23 | 基于java的数据库持久层的开发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101110030A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980213A (zh) * | 2010-11-23 | 2011-02-23 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
CN102110111A (zh) * | 2009-12-29 | 2011-06-29 | 北京大学 | 数据库操作命令的处理方法及装置 |
CN102346774A (zh) * | 2011-09-26 | 2012-02-08 | 深圳市信游天下网络科技有限公司 | 一种数据库操作方法及装置 |
CN102508673A (zh) * | 2011-12-02 | 2012-06-20 | 方正国际软件有限公司 | 快速开发与配置平台类软件的系统及方法 |
CN102521409A (zh) * | 2011-12-28 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种基于通信协议的数据库数据批量更新方法 |
CN102521387A (zh) * | 2011-12-21 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种基于插件的数据迁移方法 |
CN102750382A (zh) * | 2012-06-28 | 2012-10-24 | 上海寰创通信科技股份有限公司 | 一种用于网管系统的关系型数据查询方法 |
CN102799582A (zh) * | 2011-05-23 | 2012-11-28 | 中兴通讯股份有限公司 | 提高网管自动发现业务效率的方法及装置 |
CN103064968A (zh) * | 2012-12-31 | 2013-04-24 | 中国电子科技集团公司第十五研究所 | 一种基于缓存的标准化数据打包方法 |
CN104572047A (zh) * | 2013-10-18 | 2015-04-29 | 镇江鼎拓科技信息有限公司 | 一种基于Apache Tomcat的WEB数据库开发组件方法 |
CN105302565A (zh) * | 2015-11-10 | 2016-02-03 | 河海大学 | 一种基于Java的自带连接池管理的数据持久化组件 |
WO2016177027A1 (zh) * | 2015-05-06 | 2016-11-10 | 华为技术有限公司 | 批量数据查询方法和装置 |
CN108255478A (zh) * | 2018-01-19 | 2018-07-06 | 上海锐垚科技有限公司 | 一种标签式模板开发方法 |
CN109753533A (zh) * | 2018-12-28 | 2019-05-14 | 北京东方国信科技股份有限公司 | 一种多源关系型数据库客户端开发方法及装置 |
CN110007900A (zh) * | 2019-02-13 | 2019-07-12 | 平安科技(深圳)有限公司 | 工具类调用方法、系统、计算机设备和存储介质 |
CN110688398A (zh) * | 2019-08-21 | 2020-01-14 | 西藏自治区藏医院(西藏自治区藏医药研究院) | 一种藏历天文历算的演示方法及系统 |
CN111611267A (zh) * | 2020-04-30 | 2020-09-01 | 北京航天云路有限公司 | 一种将数据库数据转换为json对象配置可视化图表的方法 |
CN114217899A (zh) * | 2021-12-15 | 2022-03-22 | 平安国际智慧城市科技股份有限公司 | 数据持久化方法、装置、电子设备及存储介质 |
CN114356302A (zh) * | 2022-03-15 | 2022-04-15 | 江苏数兑科技有限公司 | 一种基于Gremlin语言的持久层优化方法 |
-
2007
- 2007-08-23 CN CNA200710130907XA patent/CN101110030A/zh active Pending
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110111A (zh) * | 2009-12-29 | 2011-06-29 | 北京大学 | 数据库操作命令的处理方法及装置 |
CN101980213A (zh) * | 2010-11-23 | 2011-02-23 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
CN101980213B (zh) * | 2010-11-23 | 2012-09-19 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
CN102799582A (zh) * | 2011-05-23 | 2012-11-28 | 中兴通讯股份有限公司 | 提高网管自动发现业务效率的方法及装置 |
CN102799582B (zh) * | 2011-05-23 | 2015-06-03 | 中兴通讯股份有限公司 | 提高网管自动发现业务效率的方法及装置 |
CN102346774A (zh) * | 2011-09-26 | 2012-02-08 | 深圳市信游天下网络科技有限公司 | 一种数据库操作方法及装置 |
CN102346774B (zh) * | 2011-09-26 | 2013-09-18 | 深圳市信游天下网络科技有限公司 | 一种数据库操作方法 |
CN102508673A (zh) * | 2011-12-02 | 2012-06-20 | 方正国际软件有限公司 | 快速开发与配置平台类软件的系统及方法 |
CN102508673B (zh) * | 2011-12-02 | 2015-07-29 | 方正国际软件有限公司 | 快速开发与配置平台类软件的系统及方法 |
CN102521387A (zh) * | 2011-12-21 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种基于插件的数据迁移方法 |
CN102521409A (zh) * | 2011-12-28 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种基于通信协议的数据库数据批量更新方法 |
CN102750382A (zh) * | 2012-06-28 | 2012-10-24 | 上海寰创通信科技股份有限公司 | 一种用于网管系统的关系型数据查询方法 |
CN102750382B (zh) * | 2012-06-28 | 2016-08-03 | 上海寰创通信科技股份有限公司 | 一种用于网管系统的关系型数据查询方法 |
CN103064968A (zh) * | 2012-12-31 | 2013-04-24 | 中国电子科技集团公司第十五研究所 | 一种基于缓存的标准化数据打包方法 |
CN104572047A (zh) * | 2013-10-18 | 2015-04-29 | 镇江鼎拓科技信息有限公司 | 一种基于Apache Tomcat的WEB数据库开发组件方法 |
US10678789B2 (en) | 2015-05-06 | 2020-06-09 | Huawei Technologies Co., Ltd. | Batch data query method and apparatus |
WO2016177027A1 (zh) * | 2015-05-06 | 2016-11-10 | 华为技术有限公司 | 批量数据查询方法和装置 |
CN105302565A (zh) * | 2015-11-10 | 2016-02-03 | 河海大学 | 一种基于Java的自带连接池管理的数据持久化组件 |
CN108255478A (zh) * | 2018-01-19 | 2018-07-06 | 上海锐垚科技有限公司 | 一种标签式模板开发方法 |
CN109753533A (zh) * | 2018-12-28 | 2019-05-14 | 北京东方国信科技股份有限公司 | 一种多源关系型数据库客户端开发方法及装置 |
CN110007900A (zh) * | 2019-02-13 | 2019-07-12 | 平安科技(深圳)有限公司 | 工具类调用方法、系统、计算机设备和存储介质 |
CN110688398A (zh) * | 2019-08-21 | 2020-01-14 | 西藏自治区藏医院(西藏自治区藏医药研究院) | 一种藏历天文历算的演示方法及系统 |
CN110688398B (zh) * | 2019-08-21 | 2023-10-13 | 西藏自治区藏医院(西藏自治区藏医药研究院) | 一种藏历天文历算的演示方法及系统 |
CN111611267A (zh) * | 2020-04-30 | 2020-09-01 | 北京航天云路有限公司 | 一种将数据库数据转换为json对象配置可视化图表的方法 |
CN111611267B (zh) * | 2020-04-30 | 2024-04-05 | 北京航天云路有限公司 | 一种将数据库数据转换为json对象配置可视化图表的方法 |
CN114217899A (zh) * | 2021-12-15 | 2022-03-22 | 平安国际智慧城市科技股份有限公司 | 数据持久化方法、装置、电子设备及存储介质 |
CN114217899B (zh) * | 2021-12-15 | 2023-10-17 | 深圳平安智慧医健科技有限公司 | 数据持久化方法、装置、电子设备及存储介质 |
CN114356302A (zh) * | 2022-03-15 | 2022-04-15 | 江苏数兑科技有限公司 | 一种基于Gremlin语言的持久层优化方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101110030A (zh) | 基于java的数据库持久层的开发方法 | |
US7089566B1 (en) | Method for accessing object linking-embedding database data via JAVA database connectivity | |
US7284010B2 (en) | System and method for storing and retrieving a field of a user defined type outside of a database store in which the type is defined | |
US6314430B1 (en) | System and method for accessing a database from a task written in an object-oriented programming language | |
US7536409B2 (en) | Having a single set of object relational mappings across different instances of the same schemas | |
US6754670B1 (en) | Mapping relational tables to object oriented classes | |
CA2483963C (en) | A method, computer program and computer for accessing data in an environment of multiple data repositories | |
US6978261B2 (en) | Using database management system's infrastructure to invoke a stored procedure for creating and preparing a database application | |
WO1999052044A1 (en) | A system and method for accessing data stores as objects | |
US20060047780A1 (en) | Method and apparatus for web-based, schema-driven application-server and client-interface package using a generalized, data-object format and asynchronous communication methods without the use of a markup language. | |
EP1622046A2 (en) | System and method for delayed fetching of designated members of a user defined type | |
US7174326B2 (en) | Database system providing methodology for prepared statement cloning | |
JPH0644128A (ja) | オブジェクト指向プログラミングを支援するデータベース管理システム及び方法 | |
EP1457878B1 (en) | Automatic generation of an object model from a dimensional model | |
US6542900B1 (en) | Method and apparatus for distributed object mapping in a java language environment | |
US6658426B1 (en) | Object-oriented database abstraction and statement generation | |
WO2002065277A2 (en) | Method and system for incorporating legacy applications into a distributed data processing environment | |
US6473807B1 (en) | System for invocation of CICS programs as database stored procedures | |
US9772951B2 (en) | Preemptive guest merging for virtualization hypervisors | |
US6424974B1 (en) | Storing P-code in a database | |
US7136872B2 (en) | Method, system, and article of manufacture for transferring structured data between different data stores | |
US20060242167A1 (en) | Object based test library for WinFS data model | |
US6763361B1 (en) | Object-oriented database abstraction and statement generation | |
US20010021932A1 (en) | Access to server resources from heterogeneous platforms | |
Bai | Query Data from Databases |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |