一、简述
DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
1)DBUtils三个核心功能
① QUeryRunner中提供对sql语句操作的API。
② ResultSetHandler接口,用于定义select操作后,怎样封装结果集
③ DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
2)注意
① 需要导入的jar包:①MySQL驱动 ②c3p0包 ③DBUtils包
② 添加c3p0-config.xml配置
③ 可以自动添加一个JDBCUtils工具类:用来获取c3p0连接池对象
二、QueryRunner核心类
1)QueryRunner:带参-提供数据源,dbutils底层自动维护连接Connection;无参-不提供连接池对象,在调用下面的方法时必须提供Connection对象。
- QueryRunner();创建一个与数据库无关的QueryRunner对象。后期在操作数据库的时候,需要手动给一个Connection对象,他可以手动控制事务。
- Connection.setAutoCommit(false);设置手动管理事务
- Connection.commit();提交事务
- QueryRunner(DataSource ds);创建一个与数据库关联的QueryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。
2)update(String sql,Object...params):可执行 增-INSERT、删-DELETE、改-UPDATE
- update(String sql);
- update(String sql,Object...params);
- update(Connection conn,String sql,Object...params);
3)query(String sql,ResultSetHandler<T> rsh,Object...params):执行 查询-SELECT
- query(String sql,ResultSetHandler rsh);不需要替换参数来执行已给予的SELECT语句
- query(String sql,ResultSetHandler,Object ...params);需要一个或多个替换参数来执行已给予的SELECT语句,返回一种结果对象
- query(Connection conn,String sql,ResultSetHandler rsh,Object ...params);支持事务,需要一个或多个替换参数来执行已给予的SELECT语句,返回一种结果对象
三、ResultSetHandler结果集处理类
执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。
- ArrayHandler:适合取1条记录,把结果集中的第一行数据转成对象数组。
- ArrayListHandler:适合取多条记录,把结果集中的每一行数据都转成一个对象数组,再存放到List中。
- BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中(把每条记录封装成对象,适合取一条记录)。
- BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
- MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
- MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
- ColumnListHandler:将结果集中某一列的数据存放到List中。
- KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
- ScalarHandler:将结果集第一行的某一列放到某个对象中。
四、JavaBean
类似于Model模型
需要实现接口:java.io.Serializable
提供私有字段:private 类型 字段名;
提供getter/setter方法:
提供无参构造
五、代码演示
1 import java.sql.SQLException; 2 import java.util.List; 3 import java.util.Map; 4 5 import javax.sql.DataSource; 6 7 import org.apache.commons.dbutils.QueryRunner; 8 import org.apache.commons.dbutils.handlers.BeanHandler; 9 import org.apache.commons.dbutils.handlers.BeanListHandler; 10 import org.apache.commons.dbutils.handlers.ColumnListHandler; 11 import org.apache.commons.dbutils.handlers.MapHandler; 12 import org.apache.commons.dbutils.handlers.MapListHandler; 13 import org.apache.commons.dbutils.handlers.ScalarHandler; 14 15 import com.mchange.v2.c3p0.ComboPooledDataSource; 16 17 public class TestQueryRunner { 18 19 public static void main(String[] args) throws SQLException { 20 21 //获取数据源 22 DataSource ds = new ComboPooledDataSource(); 23 QueryRunner queryRunner = new QueryRunner(ds); 24 25 //------------------------------更新语句------------------------------------ 26 27 // String sql = "SELECT * FROM goods WHERE id = ?"; 28 // Map<String, Object> query = queryRunner.query(sql, new MapHandler(),1); 29 // for(String key:query.keySet()) { 30 // System.out.println(key+":"+query.get(key)); 31 // } 32 33 // String sql = "DELETE FROM type WHERE id in(?,?)"; 34 // int update = queryRunner.update(sql,6,7); 35 // System.out.println(update); 36 37 // String sql = "UPDATE type SET name = '生日系列' WHERE id = ?"; 38 // int update = queryRunner.update(sql,8); 39 // System.out.println(update); 40 41 // String sql = "INSERT INTO type (name) values(?)"; 42 // int update = queryRunner.update(sql,"成人系列"); 43 // System.out.println(update); 44 45 //------------------------------查询语句------------------------------------ 46 47 //ArrayHandler:将查询的结果的第一行放到一个数组中 48 // String sql = "SELECT * FROM goods"; 49 // Object[] query = queryRunner.query(sql, new ArrayHandler()); 50 // for (Object o : query) { 51 // System.out.println(o); 52 // } 53 54 //ArrayListHandler:将查询的结果的每一行放到一个数组中,然后再将数组放到集合中; 55 // String sql = "SELECT * FROM goods"; 56 // List<Object[]> query = queryRunner.query(sql, new ArrayListHandler()); 57 // for (Object[] obj : query) { 58 // for (Object o : obj) { 59 // System.out.print(o + " "); 60 // } 61 // System.out.println(); 62 // } 63 64 //BeanHandler:将查询的结果的第一行封装到一份javabean对象中; 65 // String sql = "SELECT * FROM goods"; 66 // Goods query = queryRunner.query(sql, new BeanHandler<Goods>(Goods.class)); 67 // System.out.println(query); 68 69 //BeanListHandler:将查询的结果的每一行封装到一个javabean对象中,然后再将这些对象存入list中; 70 // String sql = "SELECT * FROM goods"; 71 // List<Goods> list = queryRunner.query(sql, new BeanListHandler<Goods>(Goods.class)); 72 // for(Goods goods:list) { 73 // System.out.println(goods.getName()); 74 // } 75 76 //ColumnListHandler:查询指定的列,将查询结果放到一个List中 77 // String sql = "SELECT * FROM goods"; 78 // List<Object> list = queryRunner.query(sql, new ColumnListHandler<Object>("name")); 79 // for(Object o:list) { 80 // System.out.println(o); 81 // } 82 83 //ScalarHandler:将查询的结果的第一行的某一列放到一个对象中;精确定位到某个值; 84 // String sql = "SELECT COUNT(*) FROM goods"; 85 // Long query = queryRunner.query(sql, new ScalarHandler<Long>()); 86 // System.out.println(query); 87 88 //MapHandler:将查询的结果的第一行存入到一个map中,键为列名,值为各列值; 89 // String sql = "SELECT * FROM goods"; 90 // Map<String, Object> query = queryRunner.query(sql, new MapHandler()); 91 // for (String key : query.keySet()) { 92 // System.out.println(key + ":" + query.get(key)); 93 // } 94 95 //MapListHandler:将查询的结果的每一行存入到一个map中,键为列名,值为各列值;然后再将map存入list中; 96 // String sql = "SELECT * FROM goods"; 97 // List<Map<String, Object>> query = queryRunner.query(sql, new MapListHandler()); 98 // for (Map<String, Object> map : query) { 99 // for(String key:map.keySet()) { 100 // System.out.print(key+":"+map.get(key)+" "); 101 // } 102 // System.out.println(); 103 // } 104 } 105 106 }