您的位置:首页 > 编程语言 > Java开发

JAVA数据库访问控制框架设计与使用

2013-07-07 21:05 232 查看

JAVA数据库访问控制框架设计与使用

一、引言

这个数据库访问控制框架工程名为dbmanager,之所以想写这个框架,最主要的一个原因是,目前在JAVA开发中通常使用的第三方开源框架,如:Spring、Hibernat等,虽然功能强大且拥有很好的性能,但在具体使用的时候个人感觉总是不那么方便,而且这些第三方开源框架在使用时有很多规则,程序员只有很清楚每一个规则且按这些规则来编程,这时这些框架才能达到它们设计的目标,否则性能很差不说,程序运行时还可能会出现想不到的结果。我个人正在使用Hibernate这一框架,对这一点深有感触,所以特别设计并实现这个框架。
这个框架目前是第一版,只支持MYSQL数据库,详细版本号为1.1.8,在未来两周内,我还将继续扩展这一框架,使其可以支持SQL Server、Oracle、Sybase、DB2数据库,同时框架版本也将不断升级。
这一框架基于最原始的JDBC实现,当然像Spring、Hibernate这些第三方开源框架最终也是通过JDBC实现最终与数据库交互的功能。框架中实现有Pool功能,即数据库连接池。这一框架的数据库连接池内置实现对已有数据库连接的连接保持,不会像Hibernate那样,你要另外想办法保持数据库的连接,我在之前参与的一个项目中就遇到过。同时框架会自动对所有的数据库连接进行管理,在配置的数据库总的可用连接数范围内,内置实现各个数据库的可用连接数,如果程序需要的连接超过了数据库的最大连接数范围,程序员也不用担心,这个连接池会自动释放暂时不用的连接并创建新的连接,只是这样会降低框架的运行效率。
这一框架内置实现对分库应用的支持,不像Hibernate等框架,如果要使用并管理多个数据库,还需要另外写配置和代码才能实现。好了,废话不多说,先来看看这一框架的整体结构。

二、框架结构

本框架的结构分为五个部分,第一部分是数据连接,包括数据库连接、数据库连接池、数据库操作三个类。第二部分是数据实体,包括实体接口、抽象类、基本实现类等。第三部分是SQL语句构造器,包括SQL语句构造接口、抽象类、MYSQL数据库构造类、MYSQL数据库检测类等。第四部分是数据操作器,包括操作接口、抽象类、基础操作类等。第五个部分是一些常用的工具集,包括日期工具、字符串工具、XML读写工具、日志工具、加密/解密工具等。下面我们先看第一部分,数据连接。本节只对前四个部分进行说明,第五部分(常用工具集)在此省略。

2.1、数据连接



数据连接部分包括数据库连接类(SQLBaseConn)、数据库连接器(SQLBasePool)和数据库操作(SQLBase)三个类,如上图所示。通常来说程序员在使用此框架时根本不会接触到这三个类,所以这三个类的详细说明就不细说了。通过这三个类,本框架实现数据库连接池管理、数据库连接保持、分库应用的支持、数据库操作等最基本的功能。

2.2、数据实体

数据实体部分包括实体接口、抽象类、基本实现类等,具体结构见下图:



IBaseData接口是数据实体类的基本接口,定义一些基本操作方法,AbstractBaseData抽象类实现一些最基本的接口方法,如:获取实体字段、取指定字段的数值、判断字段是否存在等,而DatabaseInfo则是一个具体的实体类,在这个实体类中定义字段,并实现SetFieldValue方法,给实体的字段赋值。
需要特别说明的是,DatabaseInfo实体类的包名要遵循一个规则,即包名的最后一部分就是数据库名,如在本框架中,DatabaseInfo实体类的包名为:com.huang.jacky.basedata,这里的basedata就是数据库名,同时,和Hibernate相似,实体类名也就是数据表名,如DatabaseInfo实体类,就是在basedata数据库中的DatabaseInfo表。
DatabaseInfo表结构如下图:



字段说明:DBSN:数据库序列号,DBName:数据库名,CreateDates:创建日期,DBDirs:数据库所在位置,DBStyle:数据库类型,默认1为基础数据库,其它值由程序员自己定义,DBDriver:数据库驱动,DBURL:数据库连接串,请看如下示例:





本框架在使用时需要在SRC目录下定义一个名为dbcfg.xml的连接配置文件,用于指示框架如何连接到基础数据库basedata,如下图:



其中,DatabaseConfig指明基础数据库名,JDBCNAME指明数据库驱动,JDBCURL指明数据库连接串,SQLCOUNT指明数据库允许的最大连接数。其中JDBCURL数据中,用户名和密码之间的&符号由于DOM解析的限制,在此用三个_替代,即___。

2.3、SQL构造器

SQL语句构造器,包括SQL语句构造器接口、构造器抽象类、MYSQL数据库构造类、数据库检测接口、数据检测抽象类,MYSQL数据库检测类等,结构如下图:



SQL构造器使用数据库检测器检测数据表的实际字段并生成插入、修改、删除SQL语句和查询用的字段列表,这一过程在构造时执行,因此在运行时可大大提高框架的运行效率。

2.4、数据操作器

数据操作器包括操作接口、抽象类、基础操作类等,结构如下图:



AbstractBaseDataOpt抽象类实现基本的查询操作,BaseTableOpt类则在抽象的基类的基础上实现具体的增、删、改操作,并实现用指定的SQL语句执行操作。在所有的数据库操作执行时通过SQLBase对象进行,且使用预处理SQL方式(即?号参数),这样可在框架运行时提高运行效率。
在使用本框架时,如果没有特殊的需求,基本可以不用从AbstractBaseDataOpt抽象类或BaseTableOpt类来扩展数据操作实现,而且本人建议如果有扩展需求,最好从BaseTableOpt类开扩展功能。
使用数据操作器进行增、删、改操作只要调用相应的方法即可,在执行查询操作时,QueryData函数有两个参数,参数列表(condList)和值列表(valuList)。本框架的一个重要规则是,参数列表的每个元素要根据实际的查询条件进行拆分,同时值列表的元素顺序要与参数列表元素的顺序一致,下面举例说明。
假设有一个查询条件“((field1>=1) and (field2<=2)) or ((field3>=3) and (field4<=4))”,那么拆分后的参数列表有四个元素,分别是((field1>=#)and,(field2<=#))or,((field3>=#)and,(field4<=#)),值列表的四个元素分别是1、2、3、4。
在这里#号会被框架解析为?号,如果有后续的查询条件(and/or)则在#号后加入and/or,如果有括弧,则括弧的位置与实际的SQL查询条件的位置相同,比如上面的((field1>=1)
and,在组织成查询条件元素时前面两个括弧的位置不变,为((field1>=,之后跟一个#号,而这个条件后面还有查询条件,所以加上) and,就形成了第一个查询条件元素((field1>=#)and。最后一个查询条件以#号结束,如果有括弧则加上括弧,如上例中的第四个查询条件元素(field4<=#))。

以上的条件规则在本框架的所有需要用到查询条件的地方都通用,同时本框架还支持数据库的分页查询。好了,就先写到这了,如果大家有什么疑问可随时联系我。本框架的JAR文件请大家到我的CSDN资源上下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: