Java笔记(16)-数据库连接池

  1. 数据库连接池
1. 数据库连接池,存放Connection对象的容器
    当系统初始化好后,容器被创建,容器中申请一些连接对象,用户当需要访问数据库时,先从容器中获取连接对象
    使用完成后,归还连接对象
2. 实现:
    a. 标准接口:javax.sql.DataSource
    b. 方法:
        1. 获取连接:getConnection()
        2. 归还连接:
            如果连接对象Connection对象是从连接池获取的,此时调用成员方法close必不会关闭连接
            而是将连接对象归还给数据库连接池
    c. 有数据库厂商实现:
        1. C3P0:较为就的数据库连接池技术
        2. Druid:有阿里巴巴提供的较新的数据库连接池技术
3. C3P0:数据库连接池技术
    a. 使用步骤:
        1. 导入jar包(两个):
            c3p0-0.9.5.2.jar和c3p0依赖的mchange-commons-java-0.2.12.jar
        2. 创建配置文件:<会自动加载下面个命名的配置文件>
            仅使用以下名称
            c3p0.properties或c3p0-config.xml
        3. 创建数据库连接池对象:ComboPooledDataSource
        4. 获取连接对象,调用getConnection方法
4. Druid:数据连接池技术:
    a. 使用步骤:
        1. 导入jar包:
            druid-1.0.9.jar
        2. 创建配置文件:
            使用properties文件类型作为配置文件,可以自定义文件名,自定义文件路径
            使用时需要自己加载配置文件
            一些常用的额外配置:
                filters=stat
                initialSize=2
                maxActive=300
                maxWait=60000
                timeBetweenEvictionRunsMillis=60000
                minEvictableIdleTimeMillis=300000
                validationQuery=SELECT 1
                testWhileIdle=true
                testOnBorrow=false
                testOnReturn=false
                poolPreparedStatements=false
                maxPoolPreparedStatementPerConnectionSize=200
        3. 创建数据库连接池对象:
            通过工厂来创建数据库连接池对象:DruidDataSourceFactory
        4. 获取连接对象:调用getConnection方法
5. Spring JDBC:
    a. Spring框架对JDBC的简单封装
        提过了一个JDBCTemplate对象简化JDBC的开发
    b. 使用步骤:
        1. 导包:
            commons-logging-1.2.jar
            spring-beans-5.0.0.RELEASE.jar
            spring-core-5.0.0.RELEASE.jar
            spring-jdbc-5.0.0.RELEASE.jar
            spring-tx-5.0.0.RELEASE.jar
        2. 创建JDBCTemplate对象:
            需要传入DataSource对象作为参数来创建
            JDBCTemplate template = new JDBCTemplate(DataSource ds);
        3. 调用JDBCTemplate成员方法进行CRUD操作
            1. update():执行DML语句
            2. queryForMap():查询结果将结果集封装为map集合
                注意:
                    1. 列名为key,数据为value
                    2. 查询的结果集只能是1行,这样才能封装为一个map集合
            3. queryForList():查询结果将结果集封装为list集合
                注意:
                    1. 可以封装为map对象后装在list对象中
                        List<Map<String,Object>> list = template.queryForList(sql);
            4. query():查询结果将结果集封装为JavaBean对象
                注意:
                    1. 封装为JavaBean对象需要实现RowMapper结构表明封装的时什么类型对象
                        List<Emp> list = template.query(sql,new RowMapper<Emp>(){
                            //重写该方法,对结果集中的每一行处理一次
                            //该处的处理为封装为一个Emp对象
                            @Override
                            public Emp mapRow(Result rst, int i) throws SQLException{
                                Emp emp = new Emp();
                                //获取rst中的值
                                Xxx xx = rst.getXxx();
                                //设置emp对象属性值
                                emp.setXxx(xx);
                                //返回emp对象
                                return emp;
                                //返回的emp对象将放入list集合中
                            }
                        })
                    2. 使用BeanPropertyRowMapper对象来简化操作:
                        BeanPropertyRowMapper实现了RowMapper接口
                        list<Emp> list = template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
                        * 如果表中有数据项为NULL值,在Emp类的定义中应该使用包装类对象作为数据类型
                            否则基本数据类型接收NULL将会出现错误
            5. queryForObject():查询结果将结果集封装为对象
                一般用来执行一些聚合函数
                例如:
                    String sql = "select count(id) from emp";
                    Long total = template.queryForObject(sql,Long.class);
                    sout(total);
  1. 对于多个成员方法完成多个功能的类的书写,我们可以使用测试类的书写方式,使用Junit方式<添加@Test注解>,每个功能单独执行测试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值