DBUtils工具类
DBUtils封装了对JDBC的操作,简化了JDBC代码,优化crud操作。
DBUtils三个核心功能:
- QueryRunner中提供对sql语句操作的API
- ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
- DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner类
其主要功能用来做数据库的增删查改(select、update、delete、insert),简化操作
- update()方法,执行insert,update,delete操作
- query()方法,执行select操作
调用方法前,必须创建一个QueryRunner对象,获取一个连接,可以借助C3P0Utils工具类使用
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
ResultSetHandler接口
执行query()方法时,有一个返回值,类型为ResultSetHandler。用于处理结果集。
ResultSetHandler 结果集处理类
- BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中;
//查询张三的信息,返回值类型 BeanHandler user对象 返回记录
@Test
public void query4() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
User user = runner.query(" select * from users where uname=? ", new BeanHandler<User>(User.class), "张三");
System.out.println(user);
}
- BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中;
//查询所有用户信息,返回值类型 BeanListHandler List<user> 返回记录
@Test
public void query5() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
List<User> users = runner.query(" select * from users", new BeanListHandler<User>(User.class));
for (User user : users) {
System.out.println(user);
}
}
- ScalarHandler:用于处理单行单列的数据,多用于聚合函数的查询
//查询拥所有用户的数量,返回值类型 ScalarHandler
@Test
public void query6() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
Long count = (Long) runner.query(" select count(*) from users", new ScalarHandler());
System.out.println(count);
}
- ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
//查询张三的信息,返回值类型 ArrayHandler 数组
@Test
public void query() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
Object[] obj = runner.query("select * from users where uname=?", new ArrayHandler(), "张三");
System.out.println(Arrays.toString(obj));
}
- ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中
//查询张三的信息,返回值类型 ArrayListHandler 集合中装有数组
@Test
public void query1() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
List<Object[]> list = runner.query(" select * from users where uname=? ",new ArrayListHandler(), "张三");
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
}
- MapHandler:将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
//查询张三的信息,返回值类型 MapHandler map返回记录
@Test
public void query2() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
Map<String, Object> map = runner.query(" select * from users where uname=? ", new MapHandler() , "张三");
for (String key : map.keySet()) {
Object value = map.get(key);
System.out.println(key + "=" + value);
}
}
- MapListHandler:将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
//查询张三的信息,返回值类型 MapListHandler list中存储多个map 返回记录
@Test
public void query3() throws Exception {
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
List<Map<String,Object>> list = runner.query(" select * from users where uname=? ", new MapListHandler(), "张三");
for (Map<String, Object> map : list) {
for (String key : map.keySet()) {
Object value = map.get(key);
System.out.println(key + "=" + value);
}
}
}
JavaBean
JavaBean就是一个实例类,在开发中常用封装数据。上面的User就是一个实例类。
具有如下特性
- 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序
- 提供私有字段:private 类型 字段名
- 提供getter/setter方法
- 提供无参构造