衣带渐宽终不悔,为伊消得人憔悴--DbHelper增强版
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
- 核心理念
- 如何使用
- 测试实例
- 数据库内详细数据信息
- 测试代码
- 数据库连接池测试
- 测试集
- 延伸
- 相关下载链接
前几日,写了一篇关于一个 轻量级数据持久化的框架的博客(点击浏览: http://blog.csdn.net/marksinoberg/article/details/53163704 ),让我收获很多。很大的一个收获就是众多博友纷纷提出了自己的看法,让我对自己的这套程序有了更加全面的认识。
于是又对此做了进一步的完善,以期能有一个更优雅的呈现。支持了更多的拓展和自定义行为。
用法大致和之前的第一个版本相当,但是也稍有不同,下面将以一个小案例来进行阐述。
核心理念
本工具以查询为主要核心理念,即query操作为主,覆盖了多种查询方式的自动化运行流程。
其他诸如insert, update, delete以及事务操作,均由QueryRunner的update方法完成。
配备了自定义大小的数据库连接池,提升程序运行的效率,并由底层自动维护连接池的释放,申请问题。省心。
如何使用
- Step 1:
首先在项目的src目录下创建一个db.cfg.xml的文件,格式如下:
<?xml version="1.0" encoding="UTF-8" ?><project> <database name="mysql"> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/fams</url> <user>root</user> <password>mysql</password> <poolsize>20</poolsize> </database> ···</project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
Step 2:
通过注册的方式实现配置文件中的数据源的配置
Dbhelper.register()
即可Step 3:
主要的业务逻辑操作类QueryRunner
,封装了对数据库JDBC操作的增删改查等一系列的操作。
对于update方法的JDBC操作,我们无需手动的关闭数据库连接,仅仅简单的通过DbHelper的重载的release方法来实现对数据库连接对象,查询语句以及数据集的关闭操作,自动的维护数据库连接池。是不是感觉很省心啊。
测试实例
这里先根据数据库中的表结构来创建一个对应的Bean对象吧。
/** * @Date 2016年11月19日 * * @author Administrator *//** * @author 郭璞 * */public class DateTest { private int id; private String name; private Date date; @Override public String toString() { return "DateTest [id=" + id + ", name=" + name + ", date=" + date + "]"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
数据库内详细数据信息
mysql> use test;Database changedmysql> select * from datetest;+----+----------+------------+| id | name | date |+----+----------+------------+| 1 | dlut | 2016-07-06 || 2 | 清华大学 | 2016-07-03 || 3 | 北京大学 | 2016-07-28 || 4 | Mark | 2016-08-20 || 5 | Tom | 2016-08-19 || 6 | Jane | 2016-08-21 |+----+----------+------------+6 rows in set (0.00 sec)mysql>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
测试代码
数据库连接池测试
public static void main(String[] args) throws Exception { DbHelper helper = new DbHelper(); helper.register(); System.out.println(helper.connpool.size()); Connection conn = helper.getConnection(); System.out.println(helper.connpool.size()); Connection conn1 = helper.getConnection(); System.out.println(helper.connpool.size()); Connection conn2 = helper.getConnection(); System.out.println(helper.connpool.size()); System.out.println(conn.toString()); System.out.println(conn1.toString()); System.out.println(conn2.toString()); helper.release(conn); System.out.println(helper.connpool.size()); PreparedStatement stmt = conn1.prepareStatement("select * from user"); helper.release(conn2, stmt); System.out.println(helper.connpool.size()); PreparedStatement stmt1 = conn1.prepareStatement("select * from user"); ResultSet rs = stmt1.executeQuery(); helper.release(conn2, stmt1, rs); System.out.println(helper.connpool.size()); System.out.println(conn.toString()); System.out.println(conn1.toString()); System.out.println(conn2.toString()); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
测试结果:
20191817dbhelper.DbHelper$MyConnection@28c97a5dbhelper.DbHelper$MyConnection@6659c656dbhelper.DbHelper$MyConnection@6d5380c2181920dbhelper.DbHelper$MyConnection@28c97a5dbhelper.DbHelper$MyConnection@6659c656dbhelper.DbHelper$MyConnection@6d5380c2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
测试集
/** * @Date 2016年11月19日 * * @author 郭 璞 * */package mp;import java.sql.Connection;import java.util.List;import org.junit.Test;import dbhelper.DbHelper;import dbhelper.QueryRunner;import handlers.BeanHandler;import handlers.BeanListHandler;/** * @author 郭 璞 * */public class TestCase { @Test public void testSingleBean() throws Exception { System.out.println("-----------------testSingleBean-------------------------------------"); String sql = "select * from datetest where id=?"; QueryRunner runner = new QueryRunner(); DbHelper.register(); DbHelper helper = new DbHelper(); Connection conn = helper.getConnection(); DateTest datetest = runner.query(conn, sql, new BeanHandler<DateTest>(DateTest.class), 1); System.out.println(datetest.toString()); DbHelper.release(conn); } @Test public void testBeanList() throws Exception { System.out.println("-------------- testBeanList----------------------------------------"); String sql = "select * from datetest"; QueryRunner runner = new QueryRunner(); DbHelper.register(); DbHelper helper = new DbHelper(); Connection conn = helper.getConnection(); List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class)); for (DateTest date : dates) { System.out.println(date.toString()); } DbHelper.release(conn); } @Test public void testBeanListWithParams1() throws Exception { System.out.println("--------------testBeanListWithParams1----------------------------------------"); String sql = "select * from datetest where id in (?, ?, ?)"; QueryRunner runner = new QueryRunner(); DbHelper.register(); DbHelper helper = new DbHelper(); Connection conn = helper.getConnection(); Object[] params = new Object[]{1, 3, 6}; List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class), params); for (DateTest date : dates) { System.out.println(date.toString()); } DbHelper.release(conn); } @Test public void testBeanListWithParams2() throws Exception { System.out.println("--------------testBeanListWithParams2----------------------------------------"); String sql = "select * from datetest where id in (?, ?, ?) or name = ?"; QueryRunner runner = new QueryRunner(); DbHelper.register(); DbHelper helper = new DbHelper(); Connection conn = helper.getConnection(); Object[] params = new Object[]{1, 3, 6, "Mark"}; List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class), params); for (DateTest date : dates) { System.out.println(date.toString()); } DbHelper.release(conn); } @Test public void testupdate() throws Exception { System.out.println("--------------testupdate----------------------------------------"); String sql = "update datetest set name=? where name=?"; QueryRunner runner = new QueryRunner(); DbHelper.register(); DbHelper helper = new DbHelper(); Connection conn = helper.getConnection(); Object[] params = new Object[]{"郭璞", "Mark"}; runner.update(conn, sql, params); DbHelper.release(conn); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
测试结果:
-----------------testSingleBean-------------------------------------DateTest [id=1, name=dlut, date=Wed Jul 06 00:00:00 CST 2016]-------------- testBeanList----------------------------------------DateTest [id=1, name=dlut, date=Wed Jul 06 00:00:00 CST 2016]DateTest [id=2, name=清华大学, date=Sun Jul 03 00:00:00 CST 2016]DateTest [id=3, name=北京大学, date=Thu Jul 28 00:00:00 CST 2016]DateTest [id=4, name=郭璞, date=Sat Aug 20 00:00:00 CST 2016]DateTest [id=5, name=Tom, date=Fri Aug 19 00:00:00 CST 2016]DateTest [id=6, name=Jane, date=Sun Aug 21 00:00:00 CST 2016]--------------testBeanListWithParams1----------------------------------------DateTest [id=1, name=dlut, date=Wed Jul 06 00:00:00 CST 2016]DateTest [id=3, name=北京大学, date=Thu Jul 28 00:00:00 CST 2016]DateTest [id=6, name=Jane, date=Sun Aug 21 00:00:00 CST 2016]--------------testBeanListWithParams2----------------------------------------DateTest [id=1, name=dlut, date=Wed Jul 06 00:00:00 CST 2016]DateTest [id=3, name=北京大学, date=Thu Jul 28 00:00:00 CST 2016]DateTest [id=6, name=Jane, date=Sun Aug 21 00:00:00 CST 2016]--------------testupdate----------------------------------------
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
数据库中对应更新结果:
mysql> use test;Database changedmysql> select * from datetest;+----+----------+------------+| id | name | date |+----+----------+------------+| 1 | dlut | 2016-07-06 || 2 | 清华大学 | 2016-07-03 || 3 | 北京大学 | 2016-07-28 || 4 | Mark | 2016-08-20 || 5 | Tom | 2016-08-19 || 6 | Jane | 2016-08-21 |+----+----------+------------+6 rows in set (0.00 sec)mysql> select * from datetest;+----+----------+------------+| id | name | date |+----+----------+------------+| 1 | dlut | 2016-07-06 || 2 | 清华大学 | 2016-07-03 || 3 | 北京大学 | 2016-07-28 || 4 | 郭璞 | 2016-08-20 || 5 | Tom | 2016-08-19 || 6 | Jane | 2016-08-21 |+----+----------+------------+6 rows in set (0.00 sec)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
延伸
由于源代码可以随意更改,所以你可以根据自己的需求来实现私人定制。仅仅需要实现自己的handler接口就可以了。
如果你看到了这篇文章,欢迎给我提issue。当然也可以修改成你自己的工具。
相关下载链接
源码及打包好的工具jar下载
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
衣带渐宽终不悔,为伊消得人憔悴--DbHelper增强版相关推荐
- 《Oracle性能优化与诊断案例精选》——2.3 衣带渐宽终不悔
本节书摘来自异步社区出版社<Oracle性能优化与诊断案例精选>一书中的第2章,第2.3节,作者:盖国强 , 李轶楠 ,更多章节内容可以访问云栖社区"异步社区"公众号查 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
原文:将表里的数据批量生成INSERT语句的存储过程 增强版 将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的 ...
- MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...
- Facebook增强版LASER开源:零样本迁移学习,支持93种语言
来源| Facebook AI 研究院 译者 | Linstancy 责编 | 琥珀 出品 | AI 科技大本营(ID:rgznai100) [导语]为了加速自然语言处理 (NLP) 在更多语言上实现 ...
- P1276 校门外的树(增强版)(线段树)(校门三部曲)难度⭐⭐⭐
校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...
- QUARK的增强版C-QUARK问世,有效提升蛋白质结构从头预测精度
2021年8月18日,密西根大学张阳教授团队在Nature Communications上发表论文"Improving fragment-based ab initio protein st ...
- 小程序 a标签_微慕WordPress小程序增强版V2.0新版上线
2020年7月10日,我进行了一场微信小程序的直播,直播主题:微慕小程序增强版v2.0版新功能说明, 在直播里对微慕增强版v2.0版全面阐述了新版本增加的功能. 微慕小程序增强版定位是使用wordpr ...
- 字符串位加密 php,PHP字符串加密增强版
这篇文章介绍的内容是关于PHP字符串加密增强版,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下为了增加数据的安全性 避免相同字符多次加密得到结果是一致的 可以设置密文有效期 下面列举了一 ...
- 将表里的数据批量生成INSERT语句的存储过程 继续增强版
文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧 ...
- 阿里云云盾-风险识别-增强版模式发布
信息摘要: 注册风险识别与营销风险识别新增"增强版"模式,引入设备风险SDK能力,基于端检测及设备指纹,强力提升移动端风险防控能力. 适用客户: 有移动APP类企业 版本/规格功能 ...
最新文章
- sp_MSforeachtable使用方法
- python提供了方法用于读取文本文件内容_python提供了哪三种方法用于读取文本文件的内容?...
- 0-2岁的app开发人员必读,Android开发APP前的准备事项
- 向量余弦值python_向量/矩阵的余弦值打印(元素明智的操作) 使用Python的线性代数
- android launcher分析和修改10,Android Launcher分析和修改10——HotSeat深入进阶
- 005-搭建框架-实现AOP机制【二】AOP技术
- linux内核配置选项
- 学术论文的标准格式是什么?写论文有哪些小技巧?
- 差点被祭天!狂欢618,且看研发人如何绝地求生
- 职称计算机word中文字处理,职称计算机Word2003中文字处理考试大纲
- 相机模型--针孔相机投影(pinhole camera model)
- 蚂蚁电竞ANT27VQ评测
- 【keepass】密码管理软件keepass的安全风险分析,如何在使用keepass的过程中避免泄露数据库信息和密码?
- 台式计算机启动叫两声,电脑开机2声短报警什么情况
- 【Java】 org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor
- JSP 手机销售管理系统 myeclipse开发web网页 mysql数据库
- 送书|逆向系列-你一定要懂的MD5加密
- 廊坊金彩教育:拼多多场景推广是什么
- roboware-studio在ubuntu18.04出现像素干扰点解决
- 汽车行业中XCP协议和A2L文件–XCP概述
热门文章
- C++制作“简单”小游戏
- ASP.NET4.0尚未在Web服务器上注册
- 一个留美女博士的七年----分享给所有还相信梦想的朋友(zz 喜欢~~)
- 安利一款SOLIDWORKS插件,可一键帮你分离配置那种!
- 简单谈谈我所理解的货币发展史
- 系统学习机器学习之组合多分类器
- 机器学习 主成分分析(Principal Component Analysis)
- 计算机提示无法访问手机tf卡,电脑(手机)无法读取内存卡(存储卡)的解决方法大全...
- 常说的监听某个端口,是什么意思?怎么理解?
- linux capability