1. DBUtils概述
DBUtils 是 JDBC的一个简化开发工具包.使用DBUtils需要导入的jar包:commons-dbutils-1.4.jar
核心类:QueryRunner
包 org.apache.commons.dbutils
java.lang.Object
|--org.apache.commons.dbutils.AbstractQueryRunner
|--org.apache.commons.dbutils.QueryRunner
构造方法:
QueryRunner(DataSource ds),接收数据源,可使用DBCP,C3P0等工具获得.
常用API:
1. 查询
<T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
执行sql中封装的查询语句,sql语句采用预处理对象带参形式,将sql语句中的参数通过params传入,并返回结果对象,根据ResultSetHandler传入的实现类不同,结果对象可以是对象集合或者单个对象
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
这个方法可使得调用者控制连接的获得与关闭,并可同时开启一个事务.
2. 更新
int update(String sql, Object... params)
可以进行插入,更新,删除等操作.返回被影响的数据条数.
int update(Connection conn, String sql, Object... params)
这个方法可使得调用者控制连接的获得与关闭,并可同时开启一个事务.
3.关于结果集处理
Interface ResultSetHandler<T>
T为作为输入的结果集将要转换成的目标对象类型.
T handle(ResultSet rs) 该方法接收sql语句的查询结果ResultSet,并将结果集转化成具体类型的对象
ResultSetHandler的三个常用实现类
a.BeanHandler<T>
构造方法 :BeanHandler(Class<T> type)
type为将要目标JavaBean的字节码
实现方法:T handle(ResultSet rs)
使用type类型字节码构造一个目标类JavaBean对象,并把查询得到的结果集的第一行的记录的内容封装这个对象中,作为返回值返回给调用者query,并作为query的返回结果.
b.BeanListHandler<T>
与BeanHandler类似,只不过是返回的是目标类JavaBean的List集合.
c.ScalarHandler
这个类用于处理查询语句中使用聚合函数的情况,使用无参构造函数创建ScalarHandler对象时,它的handle方法将返回查询结果第一列的内容.
DBUtils工具类
DBUtils工具类提供了一些关于事务操作的方法,可以方便处理异常等.
static void commitAndClose(Connection conn) throws SQLException提交并关闭,如果有异常抛出
static commitAndCloseQuietly(Connection conn) 提交并关闭,如果有异常不做任何处理
static rollbackAndClose(Connection conn) throws SQLException 回滚并关闭,如果有异常抛出
static rollbackAndCloseQuietly(Connection conn) 回滚并关闭,如果有异常不做任何处理
2.Demo演示
使用DBUtils结合C3P0,对数据库分别进行了增删改查的操作,并演示了各个API的用法
JavaBean的结构如下,为了方便演示,重写了toString方法,数据库表结构与Bean相同.
1 public class User { 2 private int id; 3 private String name; 4 public int getId() { 5 return id; 6 } 7 public void setId(int id) { 8 this.id = id; 9 } 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 @Override 17 public String toString() { 18 return "User [id=" + id + ", name=" + name + "]"; 19 } 20 }
数据库的操作如下:(C3P0获取数据源的操作省略)
1 package com.itheima.dbutils; 2 3 import java.sql.SQLException; 4 import java.util.List; 5 6 import org.apache.commons.dbutils.QueryRunner; 7 import org.apache.commons.dbutils.handlers.BeanHandler; 8 import org.apache.commons.dbutils.handlers.BeanListHandler; 9 import org.apache.commons.dbutils.handlers.ScalarHandler; 10 import org.junit.Test; 11 12 public class DBUtilsDemo { 13 QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource()); 14 @Test 15 public void add(){ 16 try { 17 String sql = "insert into t_user(name) values(?)"; 18 Object[] params = {"White"}; 19 int r = runner.update(sql,params); 20 System.out.println(r); 21 } catch (SQLException e) { 22 throw new RuntimeException(e); 23 } 24 } 25 @Test 26 public void delete(){ 27 try { 28 String sql = "delete from t_user where id=?"; 29 Object[] params = {4}; 30 int r = runner.update(sql,params); 31 System.out.println(r); 32 } catch (SQLException e) { 33 throw new RuntimeException(e); 34 } 35 } 36 @Test 37 public void update(){ 38 try { 39 String sql = "update t_user set name=? where id=?"; 40 Object[] params = {"Jane",2}; 41 int r = runner.update(sql,params); 42 System.out.println(r); 43 } catch (SQLException e) { 44 throw new RuntimeException(e); 45 } 46 } 47 @Test 48 public void select1(){ 49 try { 50 String sql = "select * from t_user where id=?"; 51 Object[] params = {2}; 52 User user= runner.query(sql,new BeanHandler<User>(User.class),params); 53 System.out.println(user); 54 } catch (SQLException e) { 55 throw new RuntimeException(e); 56 } 57 } 58 @Test 59 public void select2(){ 60 try { 61 String sql = "select * from t_user "; 62 Object[] params = {}; 63 List<User> userList= runner.query(sql,new BeanListHandler<User>(User.class),params); 64 for(User user:userList) 65 System.out.println(user); 66 } catch (SQLException e) { 67 throw new RuntimeException(e); 68 } 69 } 70 @Test 71 public void select3(){ 72 try { 73 String sql = "select count(*) from t_user "; 74 Object[] params = {}; 75 Long count=(Long) runner.query(sql,new ScalarHandler(),params); 76 System.out.println(count); 77 } catch (SQLException e) { 78 throw new RuntimeException(e); 79 } 80 } 81 }