一、简介
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开头的方法,则会把查询结果赋予给实体类中的对应属性。
无参构造用于底层创建实例,如果没有无参构造会抛出异常。