DbUtils简介
根据官网的介绍,DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关
官网上的简介也称之为 JDBC helper library ,由此可知,DbUtils是一个工具类库,用来进行数据库通信的
用法
官方原文:The core classes/interfaces in DbUtils are QueryRunner and ResultSetHandler(在 DbUtils 中的核心类/接口为 QueryRunner 和 ResultSetHandler)
所以,我们需要掌握这两个类的使用,这篇文章先阐述第一个类
QueryRunner
QueryRunner中一共有6种方法:
- execute(执行SQL语句)
- batch(批量处理语句)
- insert(执行INSERT语句)
- insertBatch(批量处理INSERT语句)
- query(SQL中 SELECT 语句)
- update(SQL中 INSERT, UPDATE, 或 DELETE 语句)
我们主要介绍最后两种(最常用):
源码:
query方法
-
T query(String sql, ResultSetHandler rsh)
不需要替换参数来执行已给予的SELECT语句 -
- T query(String sql, ResultSetHandler rsh, Object... params)
需要一个或多个替换参数来执行已给予的SELECT语句,并返回一种对象结果
- T query(String sql, ResultSetHandler rsh, Object... params)
update方法
-
int update(Connection conn, String sql)
不需要替换参数来执行INSERT, UPDATE
DELETE语句 -
int update(Connection conn, String sql, Object... params)
需要一个或多个替换参数以及一个数据库连接来执行INSERT, UPDATE
DELETE语句 -
int update(Connection conn, String sql, Object param)
需要一个替换参数,以及一个数据库连接来执行INSERT, UPDATE
DELETE语句 -
int update(String sql)
不需要替换参数来执行已给予的INSERT, UPDATE
DELETE语句 -
int update(String sql, Object... params)
需要一个或多个替换参数来执行INSERT, UPDATE
DELETE语句(参数无需带有连接) -
int update(String sql, Object param)
不需要替换参数来执行INSERT, UPDATE
DELETE语句(参数无需带有连接)
Handler简介
一般在QueryRunner的query方法中作为参数使用。
1.BeanHandler: 返回类型位指定的类型对象
2.BeanListHandler:返回类型为指定类型的List集合
3.ScalarHandler用来获得聚合函数的值,返回类型是Object
/**
* 增加,删除,修改
*
* @param sql : sql语句
* @param args : 输入参数
*/
public int update(String sql, Object... args) {
Connection connection = null;
try {
connection = JDBCUtils.getConnection();
return new QueryRunner()
.update(
connection,
sql,
args
);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.release(connection, null);
}
return -250;
}
/**
* 查询单条记录
*
* @param clazz : 运行时对象 , 规定返回结果的类型
* @param sql
* @param args
* @return
*/
public T findOne(Class<T> clazz, String sql, Object... args) {
Connection connection = null;
try {
connection = JDBCUtils.getConnection();
return new QueryRunner()
.query(
connection,
sql,
new BeanHandler<>(clazz),
args
);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.release(connection, null);
}
return null;
}
/**
* 查询多条记录
*
* @param clazz : 运行时对象 , 规定了集合中的元素的类型
* @param sql : sql语句
* @param args : 输入参数
* @return
*/
public List<T> findList(Class<T> clazz, String sql, Object... args) {
Connection connection = null;
try {
connection = JDBCUtils.getConnection();
return new QueryRunner()
.query(
connection,
sql,
new BeanListHandler<>(clazz),
args
);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(connection, null);
}
return null;
}
public Long getTotalSize(String sql) {
Connection connection = null;
try {
connection = JDBCUtils.getConnection();
return new QueryRunner()
.query(
connection,
sql,
new ScalarHandler<>()
);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(connection, null);
}
return -250L;
}