1. DBUtils 简介
1)commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,
并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
2)API介绍:
org.apache.commons.dbutils. QueryRunner
org.apache.commons.dbutils. ResultSetHandler
org.apache.commons.dbutils. QueryRunner
org.apache.commons.dbutils. ResultSetHandler
3)工具类
org.apache.commons.dbutils.DbUtils
org.apache.commons.dbutils.DbUtils
2. QueryRunner类
1)该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
2)QueryRunner类提供了两个构造方法:
默认的构造方法
需要一个 javax.sql.DataSource 来作参数的构造方法。
2)QueryRunner类提供了两个构造方法:
默认的构造方法
需要一个 javax.sql.DataSource 来作参数的构造方法。
3. ResultSetHandler接口
1)该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
2)ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet rs) 。
3)ResultSetHandler 的作用: QueryRunner 的 query 方法的返回值最终取决于
query 方法的 ResultHandler 参数的 hanlde 方法的返回值。
4. ResultSetHandler 接口的实现类
BeanHandler
:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler :将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
MapHandler :将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler :将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
ScalarHandler : 返回结果集第一行第一列的值.
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
BeanListHandler :将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
MapHandler :将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler :将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
ScalarHandler : 返回结果集第一行第一列的值.
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
5. 测试
QueryRunner queryRunner = new QueryRunner();
@Test
public void testBeanHandler(){
Connection conn = null;
String sql = "select * from car where id > ?";
try {
conn = JDBCTools.getConnection();
Car car = queryRunner.query(conn, sql, new BeanHandler(Car.class),1);
System.out.println(car);
//Car [id=2, brand=宝马, price=350000]
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, conn);
}
}
@Test
public void testBeanListHandler(){
Connection conn = null;
String sql = "select * from car where id > ?";
try {
conn = JDBCTools.getConnection();
List<Car> cars = queryRunner.query(conn, sql, new BeanListHandler(Car.class),1);
System.out.println(cars);
//[Car [id=2, brand=宝马, price=350000], Car [id=3, brand=卡宴, price=350000],..]
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, conn);
}
}
@Test
public void testMapHandler(){
Connection conn = null;
String sql = "select * from car where id > ?";
try {
conn = JDBCTools.getConnection();
Map<String, Object> car= queryRunner.query(conn, sql, new MapHandler(),1);
System.out.println(car);
//{id=2, price=350000, brand=宝马}
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, conn);
}
}
@Test
public void testMapListHandler(){
Connection conn = null;
String sql = "select * from car where id > ?";
try {
conn = JDBCTools.getConnection();
List<Map<String, Object>> cars = queryRunner.query(conn, sql, new MapListHandler(),1);
System.out.println(cars);
//[{id=2, price=350000, brand=宝马}, {id=3, price=350000, brand=卡宴}, ..]
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, conn);
}
}
@Test
public void testScalarHandler(){
Connection conn = null;
String sql = "select * from car where id > ?";
try {
conn = JDBCTools.getConnection();
Object obj = queryRunner.query(conn, sql, new ScalarHandler(),1);
System.out.println(obj);
//2
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, conn);
}
}