DbUtils介绍
DbUtils是一个开源的Java工具类库,提供了简化JDBC编程的API,它封装了常用的JDBC操作,如查询、更新、批处理等,可以极大地简化JDBC编程的工作量。DbUtils不依赖于任何第三方库,只需引入DbUtils的JAR包即可使用。
DbUtils主要提供以下功能:
- QueryRunner:封装了查询的操作,支持将结果集映射为Java对象。
- ResultSetHandler:用于将结果集映射为Java对象。
- BasicRowProcessor:封装了结果集的处理,支持将结果集映射为Java对象。
- DbUtils:提供了数据库操作的通用工具方法,如关闭连接、关闭结果集、关闭语句等。
DbUtils的优点:
- 简化了JDBC编程,提高了开发效率。
- 代码简洁易懂,易于维护。
- 不依赖于任何第三方库,使用简单方便。
- 可以与任何JDBC驱动程序和数据库连接池一起使用。
总之,DbUtils是一个非常实用的工具类库,可以让Java开发者更加专注于业务逻辑的实现,而不是繁琐的JDBC编程。
Maven项目依赖
在Maven项目中使用DbUtils,需要在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
简单使用案例
基础流程
QueryRunner queryRunner = new QueryRunner();
创建一个QueryRunner
对象
Connection conn = getConnection();
获取数据库连接getConnection
里面是一个标准的数据库连接对象获取流程:Class.forName("com.mysql.cj.jdbc.Driver");
执行加载驱动conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
将数据库连接的配置导入数据库连接对象中
List<User> userList = queryRunner.query(conn, "select * from user", new BeanListHandler<User>(User.class));
其中 queryRunner.query()
方法执行 SQL 查询语句,第一个参数是数据库连接对象,第二个参数是 SQL 查询语句,第三个参数是结果集处理器,用于将结果集转换成 Java 对象。
DbUtils.close(conn);
调用DbUtils
关闭数据库连接,在使用数据库后一定要关闭
案例
public class Test {
public static void main(String[] args) throws SQLException {
// 创建一个QueryRunner对象,用于执行SQL语句
QueryRunner queryRunner = new QueryRunner();
// 获取数据库连接
Connection conn = getConnection();
try {
// 使用QueryRunner对象执行SQL语句,并将结果封装为一个List集合
List<User> userList = queryRunner.query(conn, "select * from user", new BeanListHandler<User>(User.class));
// 遍历查询结果
for (User user : userList) {
System.out.println(user.getId() + "\t" + user.getName());
}
} finally {
// 关闭数据库连接
DbUtils.close(conn);
}
}
private static Connection getConnection(){
//数据库连接参数
//数据库地址
final String URL = "jdbc:mysql://mysql.lldwb.top:33366/workchatsql?serverTimezone=Asia/Shanghai";
//账号
final String USER_NAME = "root";
//密码
final String PASSWORD = "@dwb123456";
//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
//加载驱动,导入数据到数据库连接对象
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return conn;
}
}
User实体类
public class User {
private int id;
private String name;
private String pwd;
private int unitId;
private boolean show;
private String remark;
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
this.show = show;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getUnitId() {
return unitId;
}
public void setUnitId(int unitId) {
this.unitId = unitId;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
DbUtils增删查改工具类
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
/**
* 基于DbUtils实现的增删查改工具类,支持常用的增删查改操作。
*/
public class DbUtilsCRUDUtil {
/**
* 插入一条数据
*
* @param conn 数据库连接
* @param sql 插入语句
* @param args 参数数组
* @return 新增数据的主键ID,如果未能获取到主键ID,则返回0
* @throws SQLException SQL异常
*/
public static int insert(Connection conn, String sql, Object... args) throws SQLException {
QueryRunner qr = new QueryRunner();
return qr.insert(conn, sql, new BeanHandler<>(Integer.class), args);
}
/**
* 删除一条数据
*
* @param conn 数据库连接
* @param sql 删除语句
* @param args 参数数组
* @return 影响的行数
* @throws SQLException SQL异常
*/
public static int delete(Connection conn, String sql, Object... args) throws SQLException {
QueryRunner qr = new QueryRunner();
return qr.update(conn, sql, args);
}
/**
* 更新一条数据
*
* @param conn 数据库连接
* @param sql 更新语句
* @param args 参数数组
* @return 影响的行数
* @throws SQLException SQL异常
*/
public static int update(Connection conn, String sql, Object... args) throws SQLException {
QueryRunner qr = new QueryRunner();
return qr.update(conn, sql, args);
}
/**
* 查询一条数据,并将结果封装成指定类型的Bean对象
*
* @param conn 数据库连接
* @param sql 查询语句
* @param cls 结果封装成的Bean类型
* @param args 参数数组
* @return 查询结果,如果查询不到数据则返回null
* @throws SQLException SQL异常
*/
public static <T> T queryForObject(Connection conn, String sql, Class<T> cls, Object... args)
throws SQLException {
QueryRunner qr = new QueryRunner();
return qr.query(conn, sql, new BeanHandler<>(cls), args);
}
/**
* 查询多条数据,并将结果封装成指定类型的Bean对象的List集合
*
* @param conn 数据库连接
* @param sql 查询语句
* @param cls 结果封装成的Bean类型
* @param args 参数数组
* @return 查询结果集合,如果查询不到数据则返回空的List集合
* @throws SQLException SQL异常
*/
public static <T> List<T> queryForList(Connection conn, String sql, Class<T> cls, Object... args)
throws SQLException {
QueryRunner qr = new QueryRunner();
return qr.query(conn, sql, new BeanListHandler<>(cls), args);
}
}
数据库连接
private static Connection getConnection(){
//数据库连接参数
//数据库地址
final String URL = "jdbc:mysql://mysql.lldwb.top:33366/workchatsql?serverTimezone=Asia/Shanghai";
//账号
final String USER_NAME = "root";
//密码
final String PASSWORD = "@dwb123456";
//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
//加载驱动,导入数据到数据库连接对象
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return conn;
}