DbUtils简单入门

DbUtils简单入门

DbUtils介绍

DbUtils是一个开源的Java工具类库,提供了简化JDBC编程的API,它封装了常用的JDBC操作,如查询、更新、批处理等,可以极大地简化JDBC编程的工作量。DbUtils不依赖于任何第三方库,只需引入DbUtils的JAR包即可使用。

DbUtils主要提供以下功能:
  1. QueryRunner:封装了查询的操作,支持将结果集映射为Java对象。
  2. ResultSetHandler:用于将结果集映射为Java对象。
  3. BasicRowProcessor:封装了结果集的处理,支持将结果集映射为Java对象。
  4. DbUtils:提供了数据库操作的通用工具方法,如关闭连接、关闭结果集、关闭语句等。
DbUtils的优点:
  1. 简化了JDBC编程,提高了开发效率。
  2. 代码简洁易懂,易于维护。
  3. 不依赖于任何第三方库,使用简单方便。
  4. 可以与任何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;  
}