一、简介

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的封装使用dbutils能极大简化idbc编码的工作量。

下载链接

DbUtils – Download Apache Commons DbUtils

二、常用类

2.1QueryRunner类

该类封装了SQL的执行,是线程安全的。可以实现增、删、改、查、批处理。其常用的两个方法:

query():查询

update():增删改都用update()

2.2ResultSetHandler接口及其实现类

该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。

其实现类包括如下:

ArrayHandler】: 把结果集中的第一行数据转成对象数组

ArrayListHandler】: 把结果集中的每一行数据都转成一个数组,再存放到List中。

BeanHandler】 : 将结果集中的第一行数据封装到一个对应的JavaBean实例中

BeanListHandler】: 将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

【columnListHandler】: 将结果集中某一列的数据存放到List中

【KevedHandername】:将结果集中的每行数据都封装到Map里,再把这些map再存到一个map里,其key为指定的

【MapHandler】:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

【MapListHandler】: 将结果集中的每一行数据都封装到一个Map里,然后再存放到List

三、测试

3.1实体类

@Datapublic class Actor {Integer id;String name;String sex;Date borndate;String phone;public Actor(Integer id,String name, String sex, Date borndate, String phone) {this.id=id;this.name = name;this.sex = sex;this.borndate = borndate;this.phone = phone;}//添加无参构造,底层可能用到反射public Actor(){}

3.2德鲁伊连接池工具类

需要下载druid的jar包

public class DruidUtil {private static DataSource ds;static {try {Properties properties = new Properties();properties.load(new FileInputStream("src\\main\\resources\\druid.properties"));ds=DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}}//获取连接public static Connection getConnect() throws SQLException {return ds.getConnection();}//关闭连接, 不是真的关闭,只是放回连接池,断掉对象引用public static void close(ResultSet resultSet, Statement statement,Connection connection){try {if (resultSet!=null){resultSet.close();}if (connection!=null){connection.close();}if (statement!=null){statement.close();}} catch (SQLException e) {throw new RuntimeException(e);}}}

3.3 德鲁伊配置文件druid.properties

#批处理rewriteBatchedStatementsurl=jdbc:mysql://localhost:3306/db01?rewriteBatchedStatements=trueusername=rootpassword=123456driverClassName=com.mysql.jdbc.DriverinitialSize=5maxActive=20#最小连接数,空闲时minIdle=1#最大等待时间,排队超时maxWait=60000validationQuery=SELECT 1testOnBorrow=truetestWhileIdle=true

3.3 测试方法

@Testpublic void dBUtilTest() throws SQLException {//1.连接Connection connect = DruidUtil.getConnect();//2.创建QueryRunnerQueryRunner queryRunner = new QueryRunner();//3.执行相关的方法,返回结果集String sql="select * from actor where id>=?";//new BeanListHandler(Actor.class) ,将resultSet-->Actor--》封装到ArrayList中//底层使用反射机制去获取Actor类的属性,然后封装//1 是给sql语句赋值,可变参数列,按顺序赋值给sql中的问号?List list = queryRunner.query(connect, sql, new BeanListHandler(Actor.class),1);for (Actor actor : list) {System.out.println(actor);}// query()会自动关闭资源resultSet、prepareStatement , 因此下面只要关闭connect即可JDBCUtil.close(null,connect,null);}

注意:

1.实体类必须要有无参构造器!以及set方法;

2.如果没有set方法,则输出的结果都是null;

3.如果没有无参构造器,则会抛出异常。

四、源码分析

源码中,会通过反射获取Actor类的所有方法。如果有set开头的方法,则会把查询结果赋予给实体类中的对应属性。

无参构造用于底层创建实例,如果没有无参构造会抛出异常。