介绍
Hutool 是一个小巧而强大的 Java 工具包,主要设计目标是简化 Java 开发,提供了一系列开箱即用的工具类和封装,极大地提高了开发效率。这里我们介绍一下对数据库的一个操作,hutool-db
特点
- 轻量级
Hutool 是一个轻量级的工具库,使用方便,无需繁琐配置,可以直接引入依赖使用。
- 开箱即用
Hutool 提供了大量常用的工具类和方法封装,覆盖了开发中各种常见场景,极大地减少了手写代码量。
- 模块化设计
Hutool 按功能划分为多个模块,可以根据需要选择性引入,不会增加项目的冗余依赖。
- 强大的中文文档和社区支持
Hutool 提供详细的中文文档,同时在国内开发者社区有广泛的用户基础。
- 模块 说明
hutool-core 核心模块,提供常用工具类,如字符串操作、日期处理、集合工具等
hutool-json JSON 解析模块,支持 JSON 数据的序列化和反序列化
hutool-http HTTP 请求模块,简化网络请求
hutool-db 数据库操作模块,简化 JDBC 使用
hutool-crypto 加密解密模块,支持常见的加密算法
hutool-log 日志模块,封装了多种日志实现
hutool-cache 缓存模块,提供本地缓存实现
hutool-poi Excel 操作模块,基于 Apache POI 封装
hutool-script 脚本模块,支持动态脚本执行
hutool-system 系统模块,获取系统属性和操作系统信息
使用
传统我们会使用jdbc的方式去操作我们的数据库,但是这样有一个问题,jdbc连接方式需要写一系列的操作,对于资源的关闭,也是一大问题。hultools工具可以帮我们封装,让我们更专注于业务开发。看接下来的代码,我们不需要去连接驱动,获取数据库连接,拿到结果,再进行一系列的关闭。
代码中通过 Db.use(dataSource) 配置了全局数据源。每次调用 Db.use().query(),Db.use().execute() 时,Hutool 会自动从数据源获取一个连接,用完后会自动释放(归还到连接池或关闭)。不需要手动管理连接的关闭。
添加maven依赖
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
public class HutoolSqlExecutorDemo {
public static void main(String[] args) {
// 1. 配置数据源
DataSource dataSource = new SimpleDataSource(
"jdbc:mysql://localhost:3306/testdb", // 替换为你的数据库地址
"root", // 替换为你的数据库用户名
"password" // 替换为你的数据库密码
);
// 2. 配置全局数据源
Db.use(dataSource);
try {
// 3. 查询操作
System.out.println("查询所有用户:");
List<Entity> users = Db.use().query("SELECT * FROM user");
for (Entity user : users) {
System.out.println("ID: " + user.get("id") + ", Username: " + user.get("username") + ", Age: " + user.get("age"));
}
// 4. 插入操作
System.out.println("插入新用户:");
int insertedRows = Db.use().execute("INSERT INTO user (username, age) VALUES (?, ?)", "Alice", 25);
System.out.println("插入了 " + insertedRows + " 行");
// 5. 更新操作
System.out.println("更新用户年龄:");
int updatedRows = Db.use().execute("UPDATE user SET age = ? WHERE username = ?", 30, "Alice");
System.out.println("更新了 " + updatedRows + " 行");
// 6. 删除操作
System.out.println("删除用户:");
int deletedRows = Db.use().execute("DELETE FROM user WHERE username = ?", "Alice");
System.out.println("删除了 " + deletedRows + " 行");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
或者我们使用SqlExcute
import cn.hutool.db.sql.SqlExecutor;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class SqlExecutorDemo {
public static void main(String[] args) {
// 1. 配置数据源
String url = "jdbc:mysql://localhost:3306/testdb"; // 替换为你的数据库地址
String username = "root"; // 替换为你的数据库用户名
String password = "password"; // 替换为你的数据库密码
Connection conn = null;
try {
// 2. 获取数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 查询操作
System.out.println("查询所有用户:");
List<Map<String, Object>> users = SqlExecutor.query(conn, "SELECT * FROM user");
for (Map<String, Object> user : users) {
System.out.println("ID: " + user.get("id") + ", Username: " + user.get("username") + ", Age: " + user.get("age"));
}
// 4. 插入操作
System.out.println("插入新用户:");
int insertedRows = SqlExecutor.execute(conn, "INSERT INTO user (username, age) VALUES (?, ?)", "Alice", 25);
System.out.println("插入了 " + insertedRows + " 行");
// 5. 更新操作
System.out.println("更新用户年龄:");
int updatedRows = SqlExecutor.execute(conn, "UPDATE user SET age = ? WHERE username = ?", 30, "Alice");
System.out.println("更新了 " + updatedRows + " 行");
// 6. 删除操作
System.out.println("删除用户:");
int deletedRows = SqlExecutor.execute(conn, "DELETE FROM user WHERE username = ?", "Alice");
System.out.println("删除了 " + deletedRows + " 行");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 7. 关闭连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}