DButils工具类库的使用

最近在做课程要求做的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 getAllComp() throws SQLException;
    public List getCompByUserid(int uid) throws SQLException;
    public List 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 getAllComp() throws SQLException {
        String sql = "select userID, description, state from complain";
        return runner.query(conn, sql, new BeanListHandler(ComplainVo.class));
    }

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

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

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


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

你可能感兴趣的:(Java)