目录
DBUtils
跳转到目录
如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils
目的: 简化JDBC编程
- 需要导入jar包
Dbutils三个核心功能介绍
- QueryRunner 中提供对sql语句操作的API.
- ResultSetHandler 接口,用于定义select操作后,怎样封装结果集.
- DbUtils 类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner核心类
跳转到目录
提供数据源
- 构造方法
QueryRunner(DataSource)
创建核心类,并提供数据源,内部自己维护Connection
- 普通方法
update(String sql , Object ... params)
执行DML语句query(String sql , ResultSetHandler , Object ... params)
执行DQL语句,并将查询结果封装到对象中。
提供连接
- 构造方法
QueryRunner()
创建核心类,没有提供数据源,在进行具体操作时,需要手动提供Connection
- 普通方法
update(Connection conn , String sql , Object ... params)
使用提供的Connection,完成- DML语句
query(Connection conn , String sql , ResultSetHandler , Object ... params)
使用提供的Connection,执行DQL语句,并将查询结果封装到对象中。
QueryRunner实现添加、更新、删除操作
- update(String sql, Object… params) 用来完成表数据的增加、删除、更新操作
添加、更新、删除操作
/**
* QueryRunner实现添加、更新、删除操作
*/
public class DBUtilsDemo1 {
@Test
public void insert() throws Exception {
// 获取一个用来执行SQL语句对象
QueryRunner qr = new QueryRunner(DruidUtil.getDataSource());
String sql = "INSERT INTO product(pid, pname, price, category_id) VALUES(?,?,?,?)";
Object[] params = {100, "百岁山", 5500, "c005"};
int count = qr.update(sql, params);
System.out.println("执行成功:=" + count);
}
@Test
public void update() throws Exception {
QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
String sql = "UPDATE product SET pname=?,price=?,category_id=? WHERE pid=?";
Object[] params = {"芒果99", "998", "c009", 13};
int count = qr.update(sql, params);
System.out.println(count);
}
@Test
public void delete() throws SQLException {
QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
String sql = "DELETE from product WHERE pid = ?";
Object[] params = {100};
int r = queryRunner.update(sql, params);
System.out.println(r);
}
}
QueryRunner实现查询操作
- query(String sql, ResultSetHandler rsh, Object… params) 用来完成表数据的查询操作
参数:- String sql: sql语句,参数用?替代
- ResultSetHandler<T> rsh: 结果集处理器,接口,必然传递实现类对象
- Object … params: 可变参数,传递参数列表,数组.
作用: 给sql中?进行赋值.
ResultSetHandler结果集
- BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中。
- BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
- ScalarHandler:它是用于单数据。例如select count(*) from 表操作。
- ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中
JavaBean
跳转到目录
JavaBean就是一个类,在开发中常用于封装数据,。具有如下特性.
- 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
- 提供私有字段:private 类型 字段名;
- 提供getter/setter方法:
- 提供无参构造
BeanHandler
跳转到目录
查询数据表结果集处理其中一种方式:
BeanHandler处理方式 将数据表的结果集第一行数据,封装成JavaBean类的对象
构造方法: BeanHandler(Class<T> type) 传递一个Class类型对象,将结果封装到哪个类的对象
@Test
public void testQueryBeanHandler() throws Exception{
QueryRunner queryRunner = new QueryRunner(DruidUtil.getDataSource());
String sql = "SELECT * FROM product WHERE pid = ?";
Object[] params = {6};
// 查询并封装
Product pro = queryRunner.query(sql, new BeanHandler<>(Product.class), params);
System.out.println(pro);
}
BeanListHandler
跳转到目录
查询数据表结果集处理其中一种方式:
BeanListHandler处理方式 将数据表的每一行数据,封装成JavaBean类对象 ,多行数据了,多个JavaBean对象,存储List集合.
@Test
public void testQueryBeanListHandler() throws Exception{
QueryRunner queryRunner = new QueryRunner(DBCPUtil.getDataSource());
String sql = "SELECT * FROM product";
Object[] params = {};
List<Product> pros = queryRunner.query(sql, new BeanListHandler<Product>(Product.class), params);
for (Product pro : pros) {
System.out.println(pro);
}
}
ScalarHander
跳转到目录
作用: 把查询结果的某一列,存储到List集合对象
构造方法:
- public ScalarHandler(): 获取查询结果的第一行的第一列
- public ScalarHandler(int index): 获取查询结果的第一行的第index列
- public ScalarHandler(String ColumnName): 获取查询结果的第一行的ColumnName列
@Test
public void testQueryScalarHandler() throws Exception{
QueryRunner queryRunner = new QueryRunner(DruidUtil.getDataSource());
String sql = "SELECT * FROM product WHERE pid = ?";
Object[] params = {2};
// 表示查询第二行的第二列
Object o = queryRunner.query(sql, new ScalarHandler(2), params);
System.out.println(o);
}
ColumnListHandler
跳转到目录
作用: 把查询结果的某一列,存储到List集合对象.用于聚合函数
构造方法:
- public ColumnListHandler(): 把第一列的内容存储到List集合中
- public ColumnListHandler(int index): 把指定编号列的内容存储到List集合中
- public ColumnListHandler(String ColumnName): 把指定列名对应列的内容存储到List集合中
@Test
public void testQueryColumnListHandler() throws Exception{
QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
String sql = "SELECT * FROM product";
// List<Object> list = queryRunner.query(sql, new ColumnListHandler());// 默认查询第一列
// List<Object> list = queryRunner.query(sql, new ColumnListHandler(2)); // 查询关系表指定的第二列
List<Object> list = queryRunner.query(sql, new ColumnListHandler("pname"));
for (Object o : list) {
System.out.println(o);
}
}
小结
跳转到目录
DBUtils工具
- 作用:简化JDBC的操作
DBUtils常用类与方法
-
QueryRunner 用来执行SQL语句对象
- update(Connection conn, String sql, Object… params) 插入表记录、更新表记录、删除表记录
- query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查询表记录
-
ResultSetHandler 处理结果集的对象
- BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中。
- BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
- ScalarHandler:它是用于单数据。例如select count(*) from 表操作。
- ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中