dbutils开源项目用法

来源:互联网 发布:java十大经典面试题 编辑:程序博客网 时间:2024/06/07 01:54

Common Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List。


DBUtils包括3个包:
org.apache.commons.dbutils 
org.apache.commons.dbutils.handlers 
org.apache.commons.dbutils.wrappers
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

 

 

org.apache.commons.dbutils
DbUtils 关闭链接等操作
QueryRunner 进行查询的操作

 

org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

 

org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。

 

 

QueryRunner 

构造 QueryRunner : 有两种方法来构造QueryRunner 一种是无参数的 一种是有DataSource类型参数的构造方法 

1:QueryRunner()    2:QueryRunner(javax.sql.DataSource ds) 

这里使用DataSource 来构造它 使用连接池来构造它的好处就是 我们无需管Connection 对象的创建与关闭了,后面调用QueryRunner对象的方法也无需传入Connection对象了 

[java] view plaincopy
  1. /**  
  2. * dbcp连接池的用法  
  3. */   
  4. public class DBUtils {   
  5. private static Properties properties;   
  6. private static DataSource dataSource;   
  7. private static Connection conn;   
  8. static {   
  9. try {   
  10. properties = new Properties();   
  11. //载入dbcp的配置文件   
  12. properties.load(DBUtils.class.   
  13. .getResourceAsStream("/dbcpconfig.properties"));   
  14. //创建个BasicDataSourceFactory对象用于创建连接池对象   
  15. BasicDataSourceFactory b = new BasicDataSourceFactory();   
  16. //把properties对象设置给BasicDataSourceFactory   
  17. dataSource = b.createDataSource(properties);   
  18. catch (Exception e) {   
  19. e.printStackTrace();   
  20. }   
  21. }   
  22. public static DataSource getdataSource() {   
  23. return dataSource;   
  24. }   
  25. }   
 

注意:需要导入dbcp连接池的jar commons-dbcp-1.2.1.jar 和所依赖的 commons-pool-1.2.jar 和commons-collections-3.1.jar 

这样我们就可以构造个queryRunner对象了 

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource()); 

 

QueryRunner 主要方法 : 

[java] view plaincopy
  1. //更新一列   
  2. queryRunner.update("update Users set username=?,password=? where id = ?"new String[]{"11","22","1"});   
  3. //删除一列   
  4. queryRunner.update("delete from Users where id =?"1);   
 

 


如果要 使用 QueryRunner的查询方法 也就是query()方法的话 那么就需要有对象来接收查询出来的ResultSet 

用什么来接收呢? 要用到 实现ResultSetHandler 接口的类 

1. BeanHandler 返回个entitybean 对象 

[java] view plaincopy
  1. //指定返回哪个 entitybean   
  2. ResultSetHandler rsh = new BeanHandler(Users.class);   
  3. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  4. Users users = (Users) queryRunner.query("select * from Users where id=?",2, rsh);   
  5. System.out.println(users.getUsername());   
 

2. BeanListHandler 返回个List List里装的是entitybean 对象 

[java] view plaincopy
  1. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  2. ResultSetHandler rsh = new BeanListHandler(Users.class);   
  3. List<Users> list = (List) queryRunner.query(   
  4. "select * from Users ", rsh);   
  5. for(Users user:list){   
  6. System.out.println(user.getUsername());   
  7. }   
 

3. ArrayListHandler 返回List 对象 list里装的为Object数组 

[java] view plaincopy
  1. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  2. // 使用ArrayListHandler 实现类来存放结果会返回ArrayList对象   
  3. ResultSetHandler rsh = new ArrayListHandler();   
  4. //list里装的是对象数组   
  5. List<Object[]> list = (List) queryRunner.query(   
  6. "select * from Users ", rsh);   
  7. for(Object[] user:list) {   
  8. for(Object obj:user)   
  9. {   
  10. System.out.println(obj);   
  11. }   
  12. }   
 

 

4. ColumnListHandler 返回List 对象 
注意: 构造 ColumnListHandler() 对象时候如果 是无参数的话 像这样 ResultSetHandler rsh = new ColumnListHandler(); 查询出来的List 里放的类型为主键的类型 值为主键的值; 

[java] view plaincopy
  1. ResultSetHandler rsh = new ColumnListHandler();   
  2. List<Integer> list = (List) queryRunner.query(   
  3. "select * from Users ", rsh);   
  4. //System.out.println(list.get(0).getClass().getSimpleName());   
  5. for(Integer in:list){   
  6. System.out.println(in);   
  7. }   
 

构造 ColumnListHandler() 对象时候如果 是有参数的话 ,像这样 ResultSetHandler rsh = new ColumnListHandler(主键值); 那么查询出来的List 里放的是就是这个主键对应的一行的记录; 

[java] view plaincopy
  1. ResultSetHandler rsh = new ColumnListHandler(2);   
  2. List<String> list = (List) queryRunner.query(   
  3. "select * from Users ", rsh);   
  4. for(String in:list){   
  5. System.out.println(in);   
  6. }   
 

 

5. KeyedHandler 根据键返回Map 

[java] view plaincopy
  1. ResultSetHandler rsh = new KeyedHandler();   
  2. //map里装的key为主键的值 value 为主键对应的那行记录名称和记录   
  3. Map map = (Map) queryRunner.query(   
  4. "select id,username,password from Users ", rsh);   
  5. //根据主键值出去那一列   
  6. // Map t = (Map) map.get(2);   
  7. System.out.println(map.get(2));   
 


6. MapHandler 根据键返回Map 

[java] view plaincopy
  1. QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());   
  2. ResultSetHandler rsh = new MapHandler();   
  3. Map map = (Map) queryRunner.query(   
  4. "select * from Users ", rsh);   
  5. System.out.println(map);   
 

 

 

下面给出一个完整的例子,建立三个Java文件

 

BeanListExample.java

[java] view plaincopy
  1. package com.sy;  
  2. import org.apache.commons.dbutils.DbUtils;  
  3. import org.apache.commons.dbutils.QueryRunner;  
  4. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.SQLException;  
  8. import java.util.List;  
  9. public class BeanListExample {  
  10.     public static void main(String[] args) {  
  11.         Connection conn = null;  
  12.         String url = "jdbc:mysql://localhost:3306/people";  
  13.         String jdbcDriver = "com.mysql.jdbc.Driver";  
  14.         String user = "root";  
  15.         String password = "hicc";  
  16.         DbUtils.loadDriver(jdbcDriver);  
  17.         try {  
  18.             conn = DriverManager.getConnection(url, user, password);  
  19.             QueryRunner qr = new QueryRunner();  
  20.             List results = (List) qr.query(conn, "select id,name from guestbook"new BeanListHandler(Guestbook.class));  
  21.             for (int i = 0; i < results.size(); i++) {  
  22.                 Guestbook gb = (Guestbook) results.get(i);  
  23.                 System.out.println("id:" + gb.getId() + ",name:" + gb.getName());  
  24.             }  
  25.         } catch (SQLException e) {  
  26.             e.printStackTrace();  
  27.         } finally {  
  28.             DbUtils.closeQuietly(conn);  
  29.         }  
  30.     }  
  31. }  
 

Guestbook.java

 

[c-sharp] view plaincopy
  1. package com.sy;  
  2. public class Guestbook {  
  3.     private Integer id;  
  4.     private String name;  
  5.     public Integer getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(Integer id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17. }  
 

MapListExample.java

[c-sharp] view plaincopy
  1. package com.sy;  
  2. import org.apache.commons.dbutils.DbUtils;  
  3. import org.apache.commons.dbutils.QueryRunner;  
  4. import org.apache.commons.dbutils.handlers.MapListHandler;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.SQLException;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10. public class MapListExample {  
  11.     public static void main(String[] args) {  
  12.         Connection conn = null;  
  13.         String url = "jdbc:mysql://localhost:3306/people";  
  14.         String jdbcDriver = "com.mysql.jdbc.Driver";  
  15.         String user = "root";  
  16.         String password = "hicc";  
  17.         DbUtils.loadDriver(jdbcDriver);  
  18.         try {  
  19.             conn = DriverManager.getConnection(url, user, password);  
  20.             QueryRunner qr = new QueryRunner();  
  21.             List results = (List) qr.query(conn, "select id,name from guestmessage"new MapListHandler());  
  22.             for (int i = 0; i < results.size(); i++) {  
  23.                 Map map = (Map) results.get(i);  
  24.                 System.out.println("id:" + map.get("id") + ",name:" + map.get("name"));  
  25.             }  
  26.         } catch (SQLException e) {  
  27.             e.printStackTrace();  
  28.         } finally {  
  29.             DbUtils.closeQuietly(conn);  
  30.         }  
  31.     }  

0 0
原创粉丝点击