数据库连接池与DBUtils工具
第十章、数据库连接池与DBUtils工具
每操作一次数据库,都会执行一次创建和断开Connnection对象的操作,这种频繁的操作Connection对象十分影响数据库的访问效率,并且增加了代码量,所以实际开发中,开发人员通常会使用数据库连接池来解决这些问题。Apache组织还提供一个DBUtils工具类库,该类库实现了对JDBC的简单封装,能在不影响性能的情况下极大地简化JDBC的编码工作。
10.1 数据库连接池
JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源,这是因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源,Java程序则要把代表连接的java.sql.Connection对象等加载到内存中。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立,数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是创建Connection而是向连接池申请,有空闲则将其返回,否则创建新的Connection,使用完毕后,连接池会将该Connection回收,并交付其他线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。
为了获取数据库连接对象(Connection),JDBC提供了javax.sql.DataSource接口,它负责与数据库的连接,并定义了返回值为Connection对象的方法
Connection getConnection(); //无参的方法建立与数据库的连接
Connection getConnection(String username,String password);//传入登录信息的方式建立与数据库的连接
习惯性把实现了该接口的类称为数据源,数据源即为数据的来源。
数据类别为水,数据库就是水库,数据源就是管道。
一般将与数据源的配置信息放在配置文件中,动态读取配置数据源。
10.2 DBUtils 工具
操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响性能的情况下及大地简化JDBC的编码工作。
工具的核心是org.apache.commons.dbutils.QueryRunner和org.apache.commons.dbutils.ResultSetHander
QueryRunnner类 - 类似于mybatis映射
QueryRunner传入数据源来构造,获取连接。
query(String sql,ResultSetHandler rs,Object… params);
update(String sql,Object… params);
update(String sql);
ResultSetHander接口
该接口处理ResultSet结果集,将结果集的数据转为不同的形式。
实现类
- BeanHander 结果集第一行数据封装到一个JavaBean中
- BeanListHander 结果集每一行数据都封装到JavaBean中,存放到List中
- ScalarHandler 某一条记录的某一列存储为Object对象