开源轻量级数据库访问框架

article/2025/10/6 19:03:55

本框架为开源框架,旨在简化用户的数据库操作,提供便捷的数据库访问服务而封装。该框架依赖于JDBC,并且基于原生JAVA SE框架的封装。

框架对比

对于经常进行数据库开发和JAVA EE开发的编程人员而言,其最先使用到的数据持久化方式则为Hibernate,或者是使用JAVA EE 或者Spring MVC等框架所自带的数据库缓冲池的方式,去管理数据库的连接。
然而,这些框架是非常优秀的,但是却显得不够轻量。
首先很多JAVA EE框架都维持了一个数据库连接的缓冲池,来管理数据库的连接,使得在这个程序中,始终都可以存在可用的数据库连接,从而避免了重复建立连接和释放连接的性能上的损耗。并且数据库连接的管理,不必交给程序员去维护,而是将维护工作,交给了程序本身,使得其自身可以监控数据库连接,当某个连接超过最大空闲时间时,才将其释放,并且在连接池中始终都保持着有不小于最小连接数的数据库连接,等待着用户的访问和使用,但是这些连接又不会过度创建,它们始终被约束在了最大连接数之内,当数据库连接过多时,则需要考虑是否有连接可用,否则需要等待其他工作的完成,从而降低了数据库的压力,提高了数据库的性能,防止高并发带来的压力。
这在Web设计中是经常使用的,并且是一种有效的解决方案,并且在Hibernate还提供了高效的缓存技术。
然而这种方式,对于客户端而言,及并发要求不高,服务器资源不尽充足的条件下,是存在很大弊端的。在这种解决方案中,始终在连接池中维护了一定数量的连接池,供用户重复使用,虽然其降低了创建连接和释放连接的开销,但是其需要始终在内存中存在这些连接备不时之需,那么对服务器的内存是一个很高的要求。
并且在并发并不是很高的项目中,这些连接很可能不会经常被使用,那么始终保持着连接,实际上也是在浪费和占用资源,浪费带宽(数据库服务和Web服务不在同一主机)和浪费内存,那么这种解决方案的弊端,便显现出来,并且始终管理连接池,也会需要开销,此时的开销不一定比重复创建和释放连接的开销小,因此在这种情形下,使用连接池并不是一种最优的解决方案,而使用传统的JDBC更加能提高数据库访问的效率,和节省不必要的资源消耗。
以上便是该框架所拥有的优势和适用的情形。

UML设计

UML类图
该UML设计采用Power Designer进行,并遵从UML规范进行设计。
在该框架中,涉及类为10个:

  1. AbstractQueryObject:主要负责数据库的操作,处理用户提交的SQL请求,需要针对不同的业务,创建实例化不同的子类进行操作。
  2. DatabaseFactory:数据库工厂,主要用户创建不同的数据库,在该接口中,只有一个databaseInfo方法,并且有多个重载版本,主要为适应于本地数据库和远程数据库
  3. DBBasicInfo:抽象基类,为数据库的基本信息,数据库名,用户名,URL地址等信息为基本属性,并且抽象出了url的get方法,使得子类自行拼接JDBC的连接URL
  4. DBConnection:数据库连接类,主要管理数据库的连接,负责连接的创建(打开), 关闭等操作
  5. IConnection:数据库连接的接口,主要提供数据库的连接操作接口
  6. Model:工具类,借助反射机制,将数据库查询结果依次解析为对应的实体类
  7. MSSQLDBInfo:Microsoft SQLServer数据库信息,为DBBasicInfo的子类,用于SQLServer的基本信息的服务
  8. MSSQLFactory:Microsoft SQLServer工厂类,可产生指定类型的SQLServer数据库信息类,供其他类使用
  9. MySQLDBInfo:MySQL 数据库信息类,为DBBasicInfo子类,用于提供MySQL数据库的基本信息
  10. MySQLFactory:MySQL数据库工厂类,可产生指定的MySQL数据库信息

使用方式

  1. 子类化AbstractQueryObject类,并重载setupDatabase方法,在该方法中指定数据库信息。
  2. 提供入口函数进行测试使用。
    如:
/***测试查询类*@author Frank**/
public final class QueryObject extends AbstractQueryObject {/* (non-Javadoc)* @see com.dbquery.interfaces.AbstractQueryObject#setupDatabase()*/@Overridepublic void setupDatabase() {DatabaseFactory factory = new MySQLFactory();DBBasicInfo mysql = factory.databaseInfo("test");DBConnection connection = new DBConnection();mysql.setUsername("root");mysql.setPassword("123456");connection.setDbinfo(mysql);dbManager = connection;}private final static String SQL_CREATE_TABLE = "CREATE TABLE TB_QUERY(id int primary key, content char(120) not null);";/*** 示例,创建一个表* @return*/public boolean createTable() {avoidNotBindDatabase();return this.update(SQL_CREATE_TABLE, new Object[0]);}
}

使用JUnit4测试如下:

public class TestUnit {@Testpublic void testCreateTable() {QueryObject query = new QueryObject();if(!query.createTable()) {fail("创建失败!");}}}

如此,即可完成对数据库的操作,而无需使用过多的语句进行处理,也省去了繁琐的而数据库创建和连接的过程,所有的内部过程都自动化进行。

注:该框架是依赖于JDBC的,因此在进行数据库操作时,需要在BuildPath中引用对应数据库类型的JDBC驱动包,如MySQL需要提供MySQL的驱动。

更优雅的方式在于,重新创建一个抽象基类泛化自AbstractQueryObject类,并且重载该setupDatabase方法,在之后的数据库访问类中,都继承自该抽象基类,并且实现业务所需要的接口。详细请参照Demo中的实例代码。

未完善之处

目前该框架,仅支持了MySQL和MSSQL数据库,未适配Oracle等其他数据库。但是对其他数据库的适配也极其简单,只需要遵照工厂方法模式对DatabaseFactory进行子类化以创建不同的数据库信息类,并且具体化DBBasicInfo类,重载其URL的拼接方法即可。
重载完成之后,即可在setupDatabase方法中,指定数据库的信息进行数据库的访问和交互。

Demo测试

Tue Aug 23 15:10:13 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
创建成功!
Tue Aug 23 15:10:14 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
插入成功!
Tue Aug 23 15:10:14 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
[TableModel [id=1, content=测试实例1], TableModel [id=2, content=测试实例2]]
Tue Aug 23 15:10:15 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
更新成功!
Tue Aug 23 15:10:15 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
[TableModel [id=1, content=新内容], TableModel [id=2, content=测试实例2]]
Tue Aug 23 15:10:15 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
删除:1

测试结果截图:
原始表:
原始表
新建表:
新建表
增删查改后:
结果

支持作者

该框架已经托管为Github仓库,请移步下载:项目源码地址
框架地址:已编译版本
Demo下载地址为:Demo源码下载地址
如果有帮助,请到Github进行star或提交错误,请支持原创,转载注明出处!


http://chatgpt.dhexx.cn/article/KDu6WT2D.shtml

相关文章

Android学习之轻量级数据库SQLite

Android中对数据的存储有很多种方式,Google为Andriod中较大的数据处理提供了SQLite数据库,SQLite是一款轻型的数据库,它在管理、使用和维护上非常强大。当然最主要的特点还是它的轻量级,适合在移动设备上使用。 今天主要来讲下最…

收藏!Python内置的轻量级数据库竟如此好用!全网最实用sqlite3实战项目。

前段时间推送了一篇Python操作MySQL数据库的文章:我用 Python 处理3万多条数据,只要几秒钟……,文章发布后反应很好,很多粉丝给我私信,有的朋友说:MySQL安装起来太麻烦了,有没有更简便的方法&am…

SQLTools: 一款全功能的 VScode 轻量级数据库管理插件

公众号关注 「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux ! VSCode SQLTools 是一个非常轻量级的数据库管理插件,可以在 VSCode 中轻松管理数据库连接、查询、SQL语句智能提示、书签、查询历史等等,常用的管理功能都有。…

c#中使用轻量级数据库sqlite开发总结

首先简单说明下含义,sqlite数据库是一种轻量级的数据库,主要特点是免安装、免配置、简单小巧,在程序中的开发基本和sql数据库一致。 准备工具:system.data.sqlite.dll和sqlite-shell-win32-x86-3081101,前者用来在程序…

最近发现的 3 个 Python 轻量级数据库,好用到爆!

你好,我是征哥,在写程序的时候经常会需要将数据保存到本地,比如是配置文件,或者是中间过程数据,通过情况下我会选择 json、pickle 或者 sqlite。但是他们都有点不大方便。 比如 json 和 pickle,需要先序列化…

sqlite原理分析和开发应用

概述 SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性。随着软件应用程序逐渐模块模块…

SQLite3-轻量级数据库

SQLite主页:SQLite Home Page SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使…

Wise Duplicate Finder(重复文件查找工具)v1.2.9.40中文免费版

Wise Duplicate Finder是一款简洁高效的重复文件管理工具,通过匹配文件名,文件大小或内容来查找和删除重复的文件,使用户摆脱烦人的重复文件,释放更多磁盘空间,有需要的赶快下载吧! 功能介绍: …

如何查找和删除Endnote中重复的文献

点击Reference,在列表中找到“Find Duplicates”

Linux命令模糊查找

1,在某文件夹下查找,且模糊匹配 find . -name xx* 且中间都必须用空格间隔 2,mv 命令格式运行结果mv 文件名 文件名将源文件名改为目标文件名mv 文件名 目录名将文件移动到目标目录mv 目录名 目录名目标目录已存在,将源目录…

文件包含漏洞详解

文章目录 文件包含概述漏洞产生原因漏洞特点小知识文件包含函数includerequireinclude_oncerequire_once 文件包含示例pikachu靶场本地文件包含漏洞演示pikachu靶场远程文件包含漏洞演示文件包含漏洞的利用PHP伪协议(文件包含漏洞常用的利用方法)文件包含…

【操作系统实验】Ubuntu Linux 虚拟机文件查找相关命令

文章目录 whereishelpmanfindlocategrepwc管道 whereis 功能描述:寻找命令的二进制文件。 同时也会找到其帮助文件,主要功能是寻找一个命令所在的位置。和find相比,whereis查找的速度非常快。 语法: whereis [选项] [命令名称] …

用 Python 实现文件查找

用 Python 实现文件查找(BIF实现及队列实现) (1)利用内置函数实现文件查找 1、功能:返回用户输入的文件的绝对路径 2、设计思路: (1)用户输入在哪个盘进行查找(2&#xf…

如何测试电脑软件重复或多,如何快捷找出电脑内的重复文件(两个工具)

我特喜欢收集各种软件和资料,但是时间久了,很多软件和资料之前下载过了,后来不记得了,又下载了,这样重复的非常多。还有,我喜欢备份文件,就算一些普通的文件,也会随手临时备份一下&a…

使用代码克隆检测功能查找重复代码

代码克隆是非常相似的独立代码片段。 在已开发一段时间的应用程序中,常会出现这种现象。 克隆提高了更改应用程序的难度,因为你必须找到并更新多个片段。 Visual Studio Ultimate 或 Visual Studio Premium 可帮助你查找代码克隆,以便你进行重…

计算机上的查找替换功能快速格式化,Excel 2016中使用查找替换功能应用技巧

大家知道Excel中有查找和替换这个功能,懂得按住【Ctrl+F】可以直接打开“查找”对话框,按住【Ctrl+H】直接打开“替换”对话框。但你真的很了解这个功能了吗? 在使用Excel的时候,对于其中的查找功能的使用基本是比不可少的,那Excel中都可以在哪里进行查找呀。下面说下在Ex…

虚拟化、文件系统、查找文件

文章目录 虚拟化虚拟化的概念安装KVM安装gustos了解并配置KVM网络桥接:NAT:仅主机(hostonly): 文件系统了解文件系统的概念:了解硬链接的概念:挂载文件系统: 查找文件: 虚拟化 虚拟化的概念 虚拟化≠虚拟机 虚拟化里…

Duplicate Cleaner Pro(电脑重复文件清理软件)官方中文版V5.15.0 | 重复文件查找王下载

Duplicate Cleaner Pro 是一款相当出色的电脑重复文件清理软件,有重复文件查找王的美誉,支持字节、MD5以及其他多种哈希算法等内容比对方式,主要功能就是帮助大家从计算机硬盘中深入快速扫描查找并删除重复的文件、音乐、视频、照片、文档以及…

python删除重复文件

使用场景 网上爬取的图片重复量太大,需要删除重复图片。 环境 python 3 hashilib 分析一下这个问题: 首先,文件个数非常多,手工查找是不现实的,再说,单凭我们肉眼,在几千张图片或文件里面找…

工具及方法 - 使用Total Commander来查找重名文件

我只是一个Total Commander的轻度使用者,主要使用的是打开多个窗口,可以方便的以标签形式切换。 还有,这个软件是免费的,只是免费版打开时多一步,要输入个数字验证。 今天在使用一个SDK时,要包含进很多头文…