最近在做课程要求做的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框架学习