一、DBUtils简介
1、DBUtils是Apache Commons组件中的一员,开源免费
2、DBUtils是对JDBC的简单封装,但是它还是被很多公司使用
3、DBUtils的jar包:dbutils.jar
二、DBUtils主要类
1、DbUtils:都是静态方法,一系列的close方法;
2、QueryRunner:
(1)update():执行insert、update、delete
(2)query():执行select语句
(3)batch():执行批处理
三、QueryRunner之更新
queryRunner的update()方法可以用来执行insert、update、delete语句
1、创建QueryRunner
构造器:QueryRunner();
2、update()方法
@Test
public void fun1() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into user values(?,?,?)";
qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");
}
@Test
public void fun2() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "insert into user values(?,?,?)";
qr.update(sql, "u1", "zhangSan", "123");
}
在fun2()中,在创建QueryRunner时传递了连接池对象,那么在调用update()方法时就不用再传递Connection了。
四、ResultSetHandler
在jdbc中执行select语句之后会得到一个ResultSet,然后我们需要对ResultSet进行转换,得到最终我们想要的数据。你可能希望把ResultSet的数据放在一个list中、Map中、Bean中。DBUtils提供了一个接口ResultHandler,它就是用来把ResultSet转换成目标类型的工具。你可以自己去实现这个接口,把ResultSet转换成你想要的类型。
(1)MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键!
(2)MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;
(3)BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
(4)BeanListHandler:多行处理器!把结果集转换成List<Bean>;
(5)ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。
(6)ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。
Map处理器
Bean处理器
Column处理器
Scalar处理器
五、QueryRunner之查询
QueryRunner的查询方法是:
public <T> T query(String sql, ResultSetHandler<T> rh, Object… params)
public <T> T query(Connection con, String sql, ResultSetHandler<T> rh, Object… params)
query()方法会通过sql语句和params查询出ResultSet,然后通过rh把ResultSet转换成对应的类型再返回。
以下演示查询数据库中所有数据,并将结果以MapListHandler()的形式打印:
@Test
public void fun2() throws SQLException {
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "select * from tab_student";
List<Map<String,Object>> list = qr.query(sql, new MapListHandler());
for(Map<String,Object> map : list) {
System.out.println(map);
}
}
QueryRunner之批处理
QueryRunner还提供了批处理方法:batch()。
我们更新一行记录时需要指定一个Object[]为参数,如果是批处理,那么就要指定Object[][]为参数了。即多个Object[]就是Object[][]了,其中每个Object[]对应一行记录:
@Test
public void fun10() throws SQLException {
DataSource ds = JdbcUtils.getDataSource();
QueryRunner qr = new QueryRunner(ds);
String sql = "insert into tab_student values(?,?,?,?)";
Object[][] params = new Object[10][];//表示 要插入10行记录
for(int i = 0; i < params.length; i++) {
params[i] = new Object[]{"S_300" + i, "name" + i, 30 + i, i%2==0?"男":"女"};
}
qr.batch(sql, params);
}