一.什么是DbUtils组件
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
下载组件,引入jar文件:commons-dbutils-1.6.jar 密码:tygh
maven环境配置:
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
二.核心类QueryRunner
带有Connection的
Int update(Connection conn, String sql, Object param);
执行更新带一个占位符的sql
Int update(Connection conn, String sql, Object… param);
执行更新带多个占位符的sql
Int[] batch(Connection conn, String sql, Object[][] params)
批处理
T query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params)
查询方法
不带有Connection的
Int update( String sql, Object param);
执行更新带一个占位符的sql
Int update( String sql, Object… param);
执行更新带多个占位符的sql
Int[] batch( String sql, Object[][] params);
批处理
注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(DataSource ds);
1.更新操作(包括delete 、insert、 update)
例1:
@Test
public void delete() throws Exception {
String sql = " delete from car where id =? ";
conn = ConnUtil.getConnextion();
// 创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
qr.update(conn, sql, 3);
DbUtils.close(conn);
}
结果测试
例2:
public void save(CarBean carBean)throws Exception {
String sql = "INSERT INTO car (carname,carEntity) VALUES(?,?); " ;
conn = ConnUtil.getConnextion();
QueryRunner qr = new QueryRunner();
// 批量插入
qr.batch(conn, sql, new Object[][]{ {"宝马","2017"},{"奔驰","2017"} });
// 关闭
conn.close();
}
2.查询操作
DbUtils提供的封装结果的一些对象:
1)BeanHandler: 查询返回单个对象
2) BeanListHandler: 查询返回list集合,集合元素是指定的对象
- ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
- ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
- ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
- MapHandler 查询返回结果的第一条记录封装为map
- MapListHandler 查询返回结果封装为List<map>
-
a.自定义结果集封装数据
@Test
public void carFind() throws Exception {
String sql = " select * from car where id = ? ";
conn = ConnUtil.getConnextion();
QueryRunner qr = new QueryRunner();
//查询
CarBean carBean= qr.query(conn, sql, new ResultSetHandler<CarBean>() {
//自定义 如何封装一个CarBean对象
public CarBean handle(ResultSet resultSet) throws SQLException {
if(resultSet.next()) {
CarBean carBean = new CarBean();
carBean.setId(resultSet.getInt("id"));
carBean.setCarname(resultSet.getString("carname"));
carBean.setCarname(resultSet.getString("carEntity"));
return carBean;
}
return null;
}
},1);
System.out.println(carBean.getId()+""+carBean.getCarname()+""+carBean.getCarEntity());
}
-
b.查询使用组件提供的BeanHandler结果集对象封装数据
@Test
public void carFind() throws Exception {
String sql = " select * from car where id = ? ";
conn = ConnUtil.getConnextion();
QueryRunner qr = new QueryRunner();
//查询
CarBean carBean = qr.query(conn,sql,new BeanHandler<CarBean>(CarBean.class),2);
System.out.println(carBean.getId()+" "+carBean.getCarname()+" "+carBean.getCarEntity());
conn.close();
}
-
c.查询使用组件提供的BeanListHandler结果集对象封装数据
@Test
public void carFind() throws Exception {
String sql = " select * from car where id = ? ";
conn = ConnUtil.getConnextion();
QueryRunner qr = new QueryRunner();
//查询
List <CarBean> carBean = qr.query(conn,sql,new BeanListHandler<CarBean>(CarBean.class),4);
System.out.println(carBean.get(0).getId()+" "+carBean.get(0).getCarname()+" "+carBean.get(0).getCarEntity());
conn.close();
}
-
d.查询使用组件提供的MapHandler 结果集对象封装数据
@Test
public void carFind() throws Exception {
String sql = " select * from car";
conn = ConnUtil.getConnextion();
QueryRunner qr = new QueryRunner();
//查询
Map<String,Object> carBean = qr.query(conn,sql,new MapHandler());
System.out.println(carBean);
conn.close();
}
-
e.查询使用组件提供的ScalarHandler 结果集对象封装数据(在聚合函数统计时候用)
@Test
public void carFind() throws Exception {
String sql = " select count(*) from car";
conn = ConnUtil.getConnextion();
QueryRunner qr = new QueryRunner();
//查询
Long carBean = qr.query(conn,sql,new ScalarHandler<Long>());
System.out.println(carBean);
conn.close();
}