📅  最后修改于: 2023-12-03 15:13:25.586000             🧑  作者: Mango
Apache Commons DBUtils 是一个用于简化 JDBC 编程的 JDBC 工具包。它是基于普通的 JDBC API 构建的,并对其进行了简单的封装和扩展。DBUtils 是 Apache Commons 项目的一部分,因此它也是一个开源项目。
DBUtils 为 JDBC 编程提供了许多便利功能,包括:
DBUtils 可以从它们的官方网站下载(地址:https://commons.apache.org/proper/commons-dbutils/)
你也可以使用 Maven,将以下依赖项添加到 pom.xml 文件中:
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
主要代码格式:
private static QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
public interface ResultSetHandler<T> {
T handle(ResultSet rs) throws SQLException;
}
public int insert(String sql, Object... params) throws SQLException {
return runner.update(sql, params);
}
public int delete(String sql, Object... params) throws SQLException {
return runner.update(sql, params);
}
public int update(String sql, Object... params) throws SQLException {
return runner.update(sql, params);
}
public <T>T query(String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException {
return runner.query(sql, rsh, params);
}
下面会使用姓名和密码来模拟用户的信息。
public class User {
private String name;
private String password;
//省略...
}
public class UserResultSetHandler<T> implements ResultSetHandler<User> {
@Override
public User handle(ResultSet rs) throws SQLException {
if(rs.next()) {
User user = new User();
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
return null;
}
}
下面是一个完整的测试代码:
public class DBUtilsTest {
private static QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
/**
* 获取用户信息
* @param name
* @param password
* @return User
*/
public static User getUser(String name, String password) {
String sql = "SELECT * FROM dbtest.user WHERE name=? AND password=?";
try {
return runner.query(sql, new UserResultSetHandler<>(), name, password);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 新增用户
* @param name
* @param password
* @return boolean
*/
public static boolean insertUser(String name, String password) {
String sql = "INSERT INTO dbtest.user (name, password) VALUES(?, ?)";
try {
int result = runner.update(sql, name, password);
return result > 0;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 删除用户
* @param name
* @param password
* @return boolean
*/
public static boolean deleteUser(String name, String password) {
String sql = "DELETE FROM dbtest.user WHERE name=? AND password=?";
try {
int result = runner.update(sql, name, password);
return result > 0;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 更新用户
* @param name
* @param password
* @return boolean
*/
public static boolean updateUser(String name, String password) {
String sql = "UPDATE dbtest.user SET password=? WHERE name=?";
try {
int result = runner.update(sql, password, name);
return result > 0;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
String name = "test";
String password = "123456";
//新增用户
System.out.println(insertUser(name, password));
//获取用户信息
User user = getUser(name, password);
System.out.println(user.getName() + " - " + user.getPassword());
//更新用户
System.out.println(updateUser(name, "654321"));
//获取用户信息
User user1 = getUser(name, "654321");
System.out.println(user1.getName() + " - " + user1.getPassword());
//删除用户
System.out.println(deleteUser(name, "654321"));
}
}
Apache Commons DBUtils 是一个非常实用的 JDBC 工具包,它可以大大简化 Java 程序员的 JDBC 编程。虽然使用 DBUtils 可能会牺牲一些灵活性,但是相对于手动编写 JDBC 代码,使用 DBUtils 编写的代码更易于维护和理解,并且更加可靠。