数据库连接池
一个用来存放数据库连接的容器。当被创建时,容器初始化,创建连接对象。
当用户需要访问数据库是,从容器中获取连接对象,在访问完毕以后,归还连接对象到连接池中。
使用数据库连接池的好处是:节约资源,用户访问更加高效。
DataSource
该接口为数据库连接池应该实现的标准接口
getConnection 从连接池获取连接,返回一个Connection对象
当对该方法返回的Connection对象调用close方法是,并不是销毁该连接,而是将该连接归还到数据库连接池中。
常用连接池实现
常用连接池实现有两个:
-
C3P0
-
Druid 阿里巴巴连接池
使用步骤为,
-
导入jar包
-
定义配置文件
-
创建核心对象 数据库连接池对象
其中C3P0和Druid的使用存在有微小的差别,C3P0使用xml作为配置文件。而Druid则使用.properties
做为配置文件。
同时,Druid创建数据库连接池时,当需要应用不同配置时,
DataSource dataSource = DruidDataSourceFactory.createDataSource(profile);
应该提供加载了不同配置文件的Properties对象。
而在C3P0中,如果需要应用不同的配置
ComboPooledDataSource pollDataSource = new ComboPooledDataSource("student");
只需要标识指定不同的配置的name属性值就可以了,不过不提供的话,那么将使用默认配置。
还有一点区别就是在申请超过最大连接数的连接时,C3P0会阻塞到有空闲的连接,而Druid会抛出异常。
Spring JDBC
使用Spring JDBC以后,就不需要再手动申请释放Statement。
使用步骤:
-
导入jar包
-
创建JdbcTemplated对象,依赖于数据源DataSource
-
调用JdbcTemplate的方法完成crud操作
如:
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
String sql = "update test set manay=? where name=?";
System.out.println(jdbcTemplate.update(sql, 200, "张三"));
常用方法
-
update 执行所有DML语句,返回int值标志影响的函数
-
queryForMap 将查询的记录封装为Map。既然是封装为Map也就意味着该方法只适合单条记录的情况
-
queryForList 封装为List
-
query 封装为为javaBean对象 第二个参数需要传递一个RowMapper接口实现类,他需要实现一个mapRow方法来封装数据。
或者使用BeanPropertyRowMapper的构造方法来创建一个mRowMapper接口实现对象,它需要提供一个类的class。
在接受到数据以后,它将自动封装。
如:
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource()); String sql = "select * from student"; List<Student> students = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));
-
queryForObject 将查询到的数据封装为指定对象 第二个参数提供转换类型的字节码文件。一般用于查询结果为单行单列的数据