1、简介
- 官网包链接:https://commons.apache.org/proper/commonsdbutils/download_dbutils.cgi
- 根据官网的介绍,DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关。
- 官网上的简介也称之为 JDBC helper library ,由此可知,DbUtils是一个工具类库,用来进行数据库通信的。
- QueryRunner 中一共有6种方法:
execute(执行SQL语句)
batch(批量处理语句)
insert(执行INSERT语句)
insertBatch(批量处理INSERT语句)
query(SQL中 SELECT 语句)
update(SQL中 INSERT, UPDATE, 或 DELETE 语句)
- 其中ResultSetHandler接口执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。常用实现类如下:
- BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
- BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
- MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
- MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
- ScalarHandler:将结果集第一行的某一列放到某个对象中。(处理MySQL中的聚合函数)
具体操作:
2、导包
2、创建测试类
2.1 增删改数据,使用update()
@Test
public void testInsert(){
//创建对象
QueryRunner runner = new QueryRunner();
Connection conn = null;
try {
conn = DBUtil.getConnection();
String sql = "insert into user values(?,?,?)";
runner.update(conn,sql,2,"gsl",22);
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.close(conn,null);
}
}
2.2 查询一个对象,使用query()方法,需要通过BeanHandler创建对象
@Test
public void testQuery01(){
QueryRunner runner = new QueryRunner();
Connection conn = null;
try {
conn = DBUtil.getConnection();
String sql = "select id,name,age from user where id = ?";
//BeanHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于一条对象
BeanHandler<User> user = new BeanHandler<User>(User.class);
User user1 = runner.query(conn,sql,user,2);
System.out.println(user1);
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn,null);
}
}
2.3 查询多条记录,使用query()方法,需要通过BeanListHandler创建对象
@Test
public void testQuery02(){
QueryRunner runner = new QueryRunner();
Connection conn = null;
try {
conn = DBUtil.getConnection();
String sql = "select id,name,age from user where id <= ?";
//BeanListHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于多条记录
BeanListHandler<User> user = new BeanListHandler<>(User.class);
List<User> users = runner.query(conn,sql,user,10);
// User user1 = runner.query(conn,sql,user,2);
System.out.println(users);
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn,null);
}
}
2.4 查询数据库对象,并返回Map类型的数据
/*
将字段及响应字段的值作为map中的key value格式
*/
@Test
public void testQuery03(){
QueryRunner runner = new QueryRunner();
Connection conn = null;
try {
conn = DBUtil.getConnection();
String sql = "select id,name,age from user where id = ?";
//MapHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于一条记录(键值对) 返回map类型
MapHandler user = new MapHandler();
Map<String, Object> map = runner.query(conn, sql, user, 2);
System.out.println(map);
System.out.println(map.get("id"));
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn,null);
}
}
2.5 特殊值操作,返回最大值,数据总数等
@Test
public void testQuery05(){
QueryRunner runner = new QueryRunner();
Connection conn = null;
try {
conn = DBUtil.getConnection();
String sql = "select max(age) from user";
//SHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于一条记录(键值对) 返回map类型
ScalarHandler handler = new ScalarHandler<>();
int count = (int) runner.query(conn, sql, handler);
System.out.println(count);
// System.out.println(map.get("id"));
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn,null);
}
}