美文网首页
JDBC进阶-数据库连接池技术以及jdbcTemplate

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

作者: 程序猿峰岑 | 来源:发表于2020-05-12 23:41 被阅读0次

    概述:上篇文章讲解了一下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基础-事务(六)

    相关文章

      网友评论

          本文标题:JDBC进阶-数据库连接池技术以及jdbcTemplate

          本文链接:https://www.haomeiwen.com/subject/xfxwnhtx.html