📜  公用DBUtils-BeanHandler类(1)

📅  最后修改于: 2023-12-03 15:36:46.281000             🧑  作者: Mango

公用DBUtils-BeanHandler类介绍

DBUtils是一个使用非常广泛的Java JDBC工具包,是Apache下的DBUtils项目中的一个子项目。它通过封装JDBC操作,使得Java开发人员能够更加方便、快捷地操作数据库,而不必关注一些琐碎的JDBC操作。

在DBUtils中,BeanHandler类非常重要,它是一个 resultSetHandler 接口的默认实现,负责将结果集 ResultSet 中的第一行数据封装成 Bean 对象。

使用方法
  • 导入jar包

首先需要导入 dbutils、dbcp、commons-logging等相关jar包,然后创建DBUtils的核心工具类QueryRunner。

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.Connection;
 
public class DbUtilsUtil {
 
    /**
     * 获取queryRunner
     * @return
     */
    public static QueryRunner getQueryRunner() {
        return new QueryRunner();
    }

    /**
     * 获取 Object[]
     * @param sql
     * @param params
     * @return
     * @throws Exception
     */
    public static Object[] query(Connection conn, String sql, Object... params) throws Exception {
        return getQueryRunner().query(conn, sql, new BeanHandler<>(Object.class), params);
    }

    /**
     * 获取 T
     * @param sql
     * @param params
     * @return
     * @throws Exception
     */
    public static <T> T query(Connection conn, String sql, Class<T> clazz, Object... params) throws Exception {
        return getQueryRunner().query(conn, sql, new BeanHandler<>(clazz), params);
    }

    /**
     * 获取list
     * @param sql
     * @param params
     * @return
     * @throws Exception
     */
    public static <T> List<T> queryList(Connection conn, String sql, Class<T> clazz, Object... params) throws Exception {
        return getQueryRunner().query(conn, sql, new BeanListHandler<>(clazz), params);
    }

    /**
     * 获取map
     * @param sql
     * @param params
     * @return
     * @throws Exception
     */
    public static Map<String, Object> queryMap(Connection conn, String sql, Object... params) throws Exception {
        return getQueryRunner().query(conn, sql, new MapHandler(), params);
    }
}
  • 定义Java Bean

接下来,需要定义一个Java Bean来封装查询结果,Java Bean中的属性和结果集中的字段一一对应。

public class User {
    private int id;
    private String name;
    private int age;
    private String gender;

    //getter和setter方法
}
  • 查询数据库

最后,就可以使用BeanHandler来查询数据库,将查询结果封装成Java Bean对象了。

Connection conn = DbUtils.getConnection(); //获取数据库连接
String sql = "SELECT * FROM user WHERE id = ?";
User user = DbUtilsUtil.query(conn, sql, User.class, 1); //查询结果封装成Java Bean
使用场景

BeanHandler适用于单个查询结果的情况,如返回一条记录或即使有多条记录,只取第一条记录时使用。常常用于较小的查询结果。

注意事项
  • 需要保证Java Bean中的属性和结果集中的字段一一对应,否则会出现查询结果和Java Bean属性不匹配的情况。

  • BeanHandler只能处理一个结果集,如果出现多个结果集,使用BeanListHandler或MapListHandler等。

  • 如果查询结果为空,BeanHandler将返回null。

  • 如果数据库中的数据类型和Java Bean中定义的类型不同,可能出现类型转换错误。需要使用BeanProcessor或手动转换数据类型。

总结

BeanHandler是DBUtils中一个非常实用的resultSetHandler的实现,通过封装JDBC操作,将查询结果封装成Java Bean对象,使得开发人员更加方便地操作数据库,并且提高了代码的可读性、可维护性。