JDBC进阶-数据库连接池技术以及jdbcTemplate

概述:上篇文章讲解了一下JDBC的一些基础知识,接下来我们来学习下JDBC进阶知识-数据库连接池以及JbdcTemplate。

什么是数据库连接池

概念:其实呢就是一个容器(集合) ,存放数据库连接的容器
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来 访问数据库时,从容器中获取连接对象,用户访问完后,会将连接对象归还给容器

为什么要使用数据库连接池

使用数据库连接池有两大好处分别是:
1.节约资源
2.用户访问高效

既然数据库连接池有这么多好处,那么我们如何来学习数据库连接池以及怎样把这项技术运用到我们的项目中呢?

实现

标准接口:DataSource。 javaxs.sql包下的

1)方法

获取连接 :getConnection();
归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接了,而是归还连接

2) 其实我们呢可以不用去实现它,有数据库厂商去实现

常用的数据库连接池实现有C3p0 ,Druid

接下来我们来分别讲解下C3p0和Druid

c3p0连接池

使用步骤 :
1.导入jar包. 下载链接
2.定义配置文件:
名称:c3p0.properties 或者c3p-config.xml
路径:直接将文件放在src目录下即可
3.创建核心对象,数据库连接池对象 combopooledDataSource
4.获取连接 getConnected();

示例代码:支付类型

  DataSource ds = new ComboPooledDataSource("test");
        Connection connection = ds.getConnection();
        PreparedStatement pst1 = null;
        PreparedStatement pst2 = null;
        try {
//            connection = JDBCUtils.getConnection();
            connection.setAutoCommit(false);//开启事务
            String sql1 = "update emplyee set salary = salary - ? where id=?";
            String sql2 = "update emplyee set salary = salary + ? where id=?";
            pst1 = connection.prepareStatement(sql1);
            pst2 = connection.prepareStatement(sql2);
            pst1.setInt(1,500);
            pst1.setInt(2,1);
            pst2.setInt(1,500);
            pst2.setInt(2,2);
            pst1.executeUpdate();
            pst2.executeUpdate();
            connection.commit();//提交事务
        } catch (Exception e) {
            e.printStackTrace();
            try {
                connection.rollback();//回滚事务
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }finally {
            JDBCUtils.close(connection,pst1,pst2);
        }
        System.out.println(connection);

Druid

数据库连接池实现技术,由阿里巴巴提供
1.导入jar包
2.定义配置文件
是properties形式的,可以叫任意名称,可以放在任意目录下
3.获取数据库连接池对象:通过工厂来获取,DruidDataSourceFactory
4.获取连接 getConnected();

 Properties properties = new Properties();
            InputStream resourceAsStream = JdbcDemo07.class.getClassLoader().getResourceAsStream("druid.properties");
            properties.load(resourceAsStream);
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            Connection connection = dataSource.getConnection();
            System.out.println(connection);

Spring JDBC

Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发
步骤
1.导入jar包
2.创建JdbcTemplate对象,依赖于数据源DataSource
JdbcTemplate jdbcTemplate = new JdbcTemplate();

接下来我们以代码的方式来使用下JdbcTemplate的一些方法函数
首先我这里c3p0为例。小伙伴们也可以使用druid
public static DataSource getDataSource(){
return new ComboPooledDataSource("test");
}

这里的test参数是config配置文件名,这里我也贴下吧:


image.png

3.调用JdbcTemplate对象来完成CRUD的操作

1)update(). 执行DML语句,增 删 改

         DataSource dataSource = JDBC01Utils.getDataSource();
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String spl = "update emplyee set salary = ? where id=?";
        int update = jdbcTemplate.update(spl, 500, 2);

2)queryForMap() 查询结果将结果封装为Map集合,将列名作为Key,将值作为value,将这条记录封装为一个Map集合

   DataSource dataSource = JDBC01Utils.getDataSource();
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "select * from emplyee where id = ?";
        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql,2);
        int id = (int) stringObjectMap.get("id");
        int salary = (int) stringObjectMap.get("salary");
        String name = (String) stringObjectMap.get("name");
        System.out.println("id === " + id +"  ======name ===="+name + " ==== salary ====" + salary);
注意:这个方法查询的结果集长度只能为1

3)queryForList() 查询结果将结果封装为一个List集合
注意:将每一条记录封装为一个Map集合,再将Map集合封装到List集合中

DataSource dataSource = JDBC01Utils.getDataSource();
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "select * from emplyee";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        System.out.println(maps);
  1. query() 查询结果,将结果封装为JavaBean对象
    query参数:RowMapper
    一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装 new BeanPropertyRowMapper<类型>(类型.class)
DataSource dataSource = JDBC01Utils.getDataSource();
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "select * from emplyee";
        List<EmplyeeProtical> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(EmplyeeProtical.class));
        for (EmplyeeProtical emplyeeProtical : query){
            System.out.println(emplyeeProtical);
        }
  1. queryObject() 查询结果,将结果封装为对象
    第五的一个 如果有小伙伴感兴趣的话 可以自己尝试下实现

好了JDBC的所有内容就讲解完了

总结:
JDBC是使用java操作数据库技术,在后台开发库中经常使用。从这两节知识文章 我们不难发现,其实JDBC还是比较简单的 ,主要的工作厂商给我们封装好了,我们只需要掌握数据库的语法操作,JDBC还是比较容易掌握的,如果小伙伴对JDBC看着还是比较困难的话,尝试回退到mysql相关文章,看完在回过头来看JDBC就比较容易了
mysql基础-安装mysql(一)
mysql基础-sql分类(二)
mysql基础-DQL查询(三)
mysq基础-约束(四)
mysql基础-数据库的设计(五)
mysql基础-事务(六)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353