DBUtils认为是一个jdbc的框架(半成品的软件/项目)
其作用是:简化jdbc的开发
DBUtils是Apache Commons组件中的一员,开源免费!
DBUtils是对JDBC的简单封装,他简化了JDBC对数据库的增、删、改、查操作
QueryRunner核心类
QueryRunner的update()方法可以用来执行insert、update、delete语句。
update的原理
创建QueryRunner
构造器:QueryRunner();
update()方法
int update(Connection con, String sql, Object… params)
@Test
public void addStu () throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into user student(?,?)";
qr.update(JdbcUtils.getConnection(), sql, 5, "zhaoLiu");
}
创建QueryRunner
构造器:QueryRunner(DataSource)
update()方法
int update(String sql, Object… params)
这种方式在创建QueryRunner时传递了连接池对象,那么在调用update()方法时就不用再传递Connection了。
@Test
public void addStudent() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
String sql = "insert into user values(?,?,?)";
qr.update(sql, 5, "zhaoLiu");
}
QueryRunner的查询方法有:
我们知道在执行select语句之后得到的是ResultSet,然后我们还需要对ResultSet进行转换,得到最终我们想要的数据。
我们可以把ResultSet的数据放到一个Bean中,也可能想把数据放到一个List中,或是一个Map中。
DBUtils提供了一个接口ResultSetHandler,它就是用来ResultSet转换成目标类型的工具。我们可以自己去实现这个接口,把ResultSet转换成你想要的类型。但是通常不用,因为DBUtils提供给我们的依据足够了!
把结果集转换成Map
// MapHandler:单行处理器!把结果集转换成Map,其中列名为键!(反射)
@Test
public void query3() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils04.getDataSource());//可以给数据库池作为参数,也可以不给
String sql = "select * from stu where sid=?";
//把一条记录转换成一个map
//map :key === 字段名
//map :value === 记录的字段值
// map里面每一个key+value==entry
Map<String, Object> map = qr.query(sql, new MapHandler(), 1);
Set<String> keys = map.keySet();
for(String key:keys){
Object value = map.get(key);
System.out.println(key+":"+value);
}
}
把结果集转换成List
// MapListHandler:多行处理器!把结果集转换成List
//返回的是一个list集合
//list里面的每一个元素是map
//每一个map对应一条记录 key:字段名称 value:字段的值
@Test
public void query4() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils04.getDataSource());//可以给数据库池作为参数,也可以不给
String sql = "select * from stu";
//把一条记录转换成一个map
//map :key === 字段名
//map :value === 记录的字段值
List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
for(Map<String, Object> map:list){
//每一个map就是一个学生的记录
Set<String> keys = map.keySet();
for(String key:keys){
Object value = map.get(key);
System.out.println(key+":"+value);
}
System.out.println("----------------------------");
}
}
把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
// BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
@Test
public void query5() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils04.getDataSource());//可以给数据库池作为参数,也可以不给
String sql = "select * from stu where sid=?";
//把一条记录转换成一个map
//map :key === 字段名
//map :value === 记录的字段值
Student student = qr.query(sql, new BeanHandler<Student>(Student.class), 1);
System.out.println(student);
}
把结果集转换成List;该处理器需要Class参数,即Bean的类型;
@Test
public void query2() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils04.getDataSource());//可以给数据库池作为参数,也可以不给
//如果上面没有给池对象,以后调用update() 更新 qr.qurey()的时候就要给连接对象
//查询所有的记录,把记录转换成一个list
String sql = "select * from stu where sid=? or sid=?";
//BeanListHandler是一个结果集处理器的实现类 实现了ResultSetHandle接口
//DButils帮咱们实现了大量的结果集处理器的类,可以把结果集转换成不同对象
//Bean是豆的意思
//JavaBean === 是一个规范 可以把一个实体类理解未一个javabean是实现了规范 规范:类里面的属性提供getter和setter方法 及构造器
List<Student> list = qr.query(sql,new BeanListHandler<Student>(Student.class),1,2);
for(Student stu:list){
System.out.println(stu);
}
}
把结果集转换成List,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。
// ColumnListHandler:多行单列处理器!把结果集转换成List
@Test
public void query6() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils04.getDataSource());//可以给数据库池作为参数,也可以不给
String sql = "select sname from stu";
List<Object> list = qr.query(sql, new ColumnListHandler());
System.out.println(list);
}
把结果集转换成Object。一般用于聚集查询,例如select count(*) from student。
// ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from student。
@Test
public void query7() throws SQLException {
QueryRunner qr = new QueryRunner(JdbcUtils04.getDataSource());//可以给数据库池作为参数,也可以不给
String sql = "select count(*) from stu";
Object rst = qr.query(sql, new ScalarHandler());
System.out.println(rst);
}