HulTools工具类DB的使用

2,468 阅读3分钟

介绍

Hutool 是一个小巧而强大的 Java 工具包,主要设计目标是简化 Java 开发,提供了一系列开箱即用的工具类和封装,极大地提高了开发效率。这里我们介绍一下对数据库的一个操作,hutool-db

特点

  1. 轻量级

Hutool 是一个轻量级的工具库,使用方便,无需繁琐配置,可以直接引入依赖使用。

  1. 开箱即用

Hutool 提供了大量常用的工具类和方法封装,覆盖了开发中各种常见场景,极大地减少了手写代码量。

  1. 模块化设计

Hutool 按功能划分为多个模块,可以根据需要选择性引入,不会增加项目的冗余依赖。

  1. 强大的中文文档和社区支持

Hutool 提供详细的中文文档,同时在国内开发者社区有广泛的用户基础。

官网文档 doc.hutool.cn/module/db/

image.png

  1. 模块 说明

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();
                }
            }
        }
    }
}