DButils工具类库的使用

时间:2021-11-01 19:01:07

最近在做课程要求做的java web应用,经队友XM的介绍,开始接触DButils这个工具类库,没接触这个之前觉得牵扯到数据库的一句一句的写也没那么麻烦,但用过这之后真心感觉,之前我干嘛那么累自己,所有工作一切搞定。下面是我在写的过程中经常用到的一些方法,留着自己哪天忘了回忆一下。

关于Commons-DButils

Commons-DButils是Apache组织提供的一个开源的JDBC工具类库,它对JDBC进行了简单的封装,学习起来很简单, 而且大大的简化了工作量,关于数据库的操作一般一两句就可以解决问题了,并且不会影响程序的性能。

其API:

  • org.apache.commons.dbutils.QueryRunner
  • org.apache.commons.dbutils.ResultSetHandler

工具类:

  • org.apache.commons.dbutils.DbUtils

QueryRunner类使用

其主要功能用来做数据库的查询(select、update、delete、insert),简化了查询的操作

  • query执行select操作
  • update执行update、insert、delete操作操作

QueryRuner类的主要方法

  • public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:
    • 执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
  • public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException
    • 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
  • public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException
    • 执行一个不需要置换参数的查询操作。
  • public int update(Connection conn, String sql, Object[] params) throws SQLException
    • 用来执行一个更新(插入、更新或删除)操作。
  • public int update(Connection conn, String sql) throws SQLException
    • 用来执行一个不需要置换参数的更新操作。


ResultSetHandler接口使用

这个的使用主要是比如我select*了,返回的是一大堆数据对吧,要放在List中,它就是用来解决这个问题的。

ResultSetHandler接口的实现类

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List


实现举例

是一些自己正在做的东西的例子,以投诉为例

投诉dao

package com.book.buy.dao;


import com.book.buy.vo.ComplainVo;

import java.sql.SQLException;
import java.util.List;

/**
* Created by violet on 15/10/27.
*/

public interface ComplainDao{

public void addComp(ComplainVo comp) throws SQLException;
public List<ComplainVo> getAllComp() throws SQLException;
public List<ComplainVo> getCompByUserid(int uid) throws SQLException;
public List<ComplainVo> getCompByState(int state) throws SQLException;
public void close();
}

Imp

package com.book.buy.daoImp;

import com.book.buy.dao.ComplainDao;
import com.book.buy.utils.DBUtils;
import com.book.buy.vo.ComplainVo;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
* Created by violet on 2015/10/28.
*/

public class ComplainImp implements ComplainDao {
private QueryRunner runner = null;
private Connection conn = null;

public ComplainImp(){
runner = new QueryRunner();
conn = DBUtils.getConnection();
}

@Override
public void addComp(ComplainVo comp) throws SQLException {
String sql = "insert into complain(userID, description) values(?, ?)";
runner.update(conn, sql, comp.getUserid(), comp.getDescription());
}

@Override
public List<ComplainVo> getAllComp() throws SQLException {
String sql = "select userID, description, state from complain";
return runner.query(conn, sql, new BeanListHandler<ComplainVo>(ComplainVo.class));
}

@Override
public List<ComplainVo> getCompByUserid(int uid) throws SQLException {
String sql = "select userID, description, state from complain where userID = ?";
return runner.query(conn, sql, new BeanListHandler<ComplainVo>(ComplainVo.class), uid);
}

@Override
public List<ComplainVo> getCompByState(int state) throws SQLException {
String sql = "select userID, description, state from complain where state = ?";
return runner.query(conn, sql, new BeanListHandler<ComplainVo>(ComplainVo.class), state);
}

@Override
public void close() {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}


这有一篇介绍DButils特别详细的博客,留着看
javaweb学习总结(四十一)——Apache的DBUtils框架学习