分享一下我老师大神的人工智能教程!零基础,通俗易懂!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增强版相关推荐

  1. 《Oracle性能优化与诊断案例精选》——2.3 衣带渐宽终不悔

    本节书摘来自异步社区出版社<Oracle性能优化与诊断案例精选>一书中的第2章,第2.3节,作者:盖国强 , 李轶楠 ,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  2. 将表里的数据批量生成INSERT语句的存储过程 增强版

    原文:将表里的数据批量生成INSERT语句的存储过程 增强版 将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的 ...

  3. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  4. Facebook增强版LASER开源:零样本迁移学习,支持93种语言

    来源| Facebook AI 研究院 译者 | Linstancy 责编 | 琥珀 出品 | AI 科技大本营(ID:rgznai100) [导语]为了加速自然语言处理 (NLP) 在更多语言上实现 ...

  5. P1276 校门外的树(增强版)(线段树)(校门三部曲)难度⭐⭐⭐

    校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...

  6. QUARK的增强版C-QUARK问世,有效提升蛋白质结构从头预测精度

    2021年8月18日,密西根大学张阳教授团队在Nature Communications上发表论文"Improving fragment-based ab initio protein st ...

  7. 小程序 a标签_微慕WordPress小程序增强版V2.0新版上线

    2020年7月10日,我进行了一场微信小程序的直播,直播主题:微慕小程序增强版v2.0版新功能说明, 在直播里对微慕增强版v2.0版全面阐述了新版本增加的功能. 微慕小程序增强版定位是使用wordpr ...

  8. 字符串位加密 php,PHP字符串加密增强版

    这篇文章介绍的内容是关于PHP字符串加密增强版,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下为了增加数据的安全性 避免相同字符多次加密得到结果是一致的 可以设置密文有效期 下面列举了一 ...

  9. 将表里的数据批量生成INSERT语句的存储过程 继续增强版

    文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧 ...

  10. 阿里云云盾-风险识别-增强版模式发布

    信息摘要: 注册风险识别与营销风险识别新增"增强版"模式,引入设备风险SDK能力,基于端检测及设备指纹,强力提升移动端风险防控能力. 适用客户: 有移动APP类企业 版本/规格功能 ...

最新文章

  1. sp_MSforeachtable使用方法
  2. python提供了方法用于读取文本文件内容_python提供了哪三种方法用于读取文本文件的内容?...
  3. 0-2岁的app开发人员必读,Android开发APP前的准备事项
  4. 向量余弦值python_向量/矩阵的余弦值打印(元素明智的操作) 使用Python的线性代数
  5. android launcher分析和修改10,Android Launcher分析和修改10——HotSeat深入进阶
  6. 005-搭建框架-实现AOP机制【二】AOP技术
  7. linux内核配置选项
  8. 学术论文的标准格式是什么?写论文有哪些小技巧?
  9. 差点被祭天!狂欢618,且看研发人如何绝地求生
  10. 职称计算机word中文字处理,职称计算机Word2003中文字处理考试大纲
  11. 相机模型--针孔相机投影(pinhole camera model)
  12. 蚂蚁电竞ANT27VQ评测
  13. 【keepass】密码管理软件keepass的安全风险分析,如何在使用keepass的过程中避免泄露数据库信息和密码?
  14. 台式计算机启动叫两声,电脑开机2声短报警什么情况
  15. 【Java】 org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor
  16. JSP 手机销售管理系统 myeclipse开发web网页 mysql数据库
  17. 送书|逆向系列-你一定要懂的MD5加密
  18. 廊坊金彩教育:拼多多场景推广是什么
  19. roboware-studio在ubuntu18.04出现像素干扰点解决
  20. 汽车行业中XCP协议和A2L文件–XCP概述

热门文章

  1. C++制作“简单”小游戏
  2. ASP.NET4.0尚未在Web服务器上注册
  3. 一个留美女博士的七年----分享给所有还相信梦想的朋友(zz 喜欢~~)
  4. 安利一款SOLIDWORKS插件,可一键帮你分离配置那种!
  5. 简单谈谈我所理解的货币发展史
  6. 系统学习机器学习之组合多分类器
  7. 机器学习 主成分分析(Principal Component Analysis)
  8. 计算机提示无法访问手机tf卡,电脑(手机)无法读取内存卡(存储卡)的解决方法大全...
  9. 常说的监听某个端口,是什么意思?怎么理解?
  10. linux capability