是 Apache 組織提供的一個開源 JDBC工具類庫,它是對JDBC的簡單封裝,學習成本極低,而且使用dbutils能極大簡化jdbc編碼的工做量,同時也不會影響程序的性能。java
使用commons-dbutils 的核心工具類:QueryRunner,該類定義了全部操做數據庫的方法mysql
如方法:T query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params)sql
DbUtils提供的封裝結果的一些對象:數據庫
1) BeanHandler 查詢返回單個對象(經常使用)apache
2) BeanListHandler 查詢返回list集合,集合元素是指定的對象(經常使用)數組
3) ArrayHandler 查詢返回結果記錄的第一行,封裝對對象數組, 即返回:Object[]函數
4) ArrayListHandler 把查詢的每一行都封裝爲對象數組,再添加到list集合中工具
5) ScalarHandler 查詢返回結果記錄的第一行的第一列 (在聚合函數統計的時候用)性能
6) MapHandler 查詢返回結果的第一條記錄封裝爲map學習
使用:
前提:實體類必須符合javabean規範,而且實體類中的字段必須與數據庫表的字段相同。引入jar文件 : commons-dbutils-1.6.jar
一、簡單建立一個工具類JdbcUtil,方便代碼調用
1 public class JdbcUtil { 2 private static String url = "jdbc:mysql:///test01"; 3 private static String user = "root"; 4 private static String password = "123456"; 5 //獲取QueryRunner對象
6 public static QueryRunner getQueryRunner(){ 7 return new QueryRunner(); 8 } 9 //獲取鏈接
10 public static Connection getConnection(){ 11 try { 12 Class.forName("com.mysql.jdbc.Driver"); 13 return DriverManager.getConnection(url, user, password); 14 } catch (Exception e) { 15 e.printStackTrace(); 16 throw new RuntimeException(e); 17 } 18 } 19 }
二、調用query方法
1 @Test 2 public void test1() { 3 List<Student> list = null; 4 try { 5 Connection conn = JdbcUtil.getConnection(); 6 list = JdbcUtil.getQueryRunner().query(conn, "select * from Student"
7 , new BeanListHandler<Student>(Student.class)); 8 } catch (Exception e) { 9 e.printStackTrace(); 10 throw new RuntimeException(e); 11 } 12 if(list !=null){ 13 for (Student student : list) { 14 System.out.println(student); 15 } 16 } 17 }
C3P0核心類:ComboPooledDataSource
使用:
前提 引入jar文件 : c3p0-0.9.1.2.jar
方式一:不使用配置文件
一、簡單創建一個jdbc工具類,方便方法調用
1 import java.beans.PropertyVetoException; 2 import java.sql.Connection; 3 import org.apache.commons.dbutils.QueryRunner; 4
5 import com.mchange.v2.c3p0.ComboPooledDataSource; 6
7
8 public class JdbcUtil { 9 private static String url = "jdbc:mysql:///test01"; 10 private static String user = "root"; 11 private static String password = "123456"; 12 private static ComboPooledDataSource dataSource = null; 13 private Connection con = null; 14 static{ 15 //初始化操做
16 dataSource = new ComboPooledDataSource();// 使用默認的配置
17 dataSource.setJdbcUrl(url);//設置鏈接字符串
18 try { 19 dataSource.setDriverClass("com.mysql.jdbc.Driver");//獲取驅動
20 } catch (PropertyVetoException e) { 21 e.printStackTrace(); 22 } 23 dataSource.setUser(user);//用戶名
24 dataSource.setPassword(password);//密碼
25 dataSource.setInitialPoolSize(3);//初始化時獲取三個鏈接
26 dataSource.setMaxPoolSize(6);//鏈接池中保留的最大鏈接數
27 dataSource.setMaxIdleTime(60); //最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄
28 } 29
30 //獲取QueryRunner對象
31 public static QueryRunner getQueryRunner(){ 32 return new QueryRunner(dataSource); 33 } 34 //獲取鏈接純 經過c3p0核心類對象獲取(此例子沒用到該方法)
35 public static Connection getConnection(){ 36 try { 37 return dataSource.getConnection(); 38 } catch (Exception e) { 39 e.printStackTrace(); 40 throw new RuntimeException(e); 41 } 42 } 43 }
二、執行測試
1 @Test 2 public void test1() { 3 List<Student> list = null; 4 try { 5 Connection conn = JdbcUtil.getConnection(); 6 list = JdbcUtil.getQueryRunner().query("select * from Student"
7 , new BeanListHandler<Student>(Student.class)); 8 } catch (Exception e) { 9 e.printStackTrace(); 10 throw new RuntimeException(e); 11 } 12 if(list !=null){ 13 for (Student student : list) { 14 System.out.println(student); 15 } 16 } 17 }
方式二:使用配置文件來初始化
一、將C3P0配置文件c3p0-config.xml放置在工程src目錄下
c3p0-config.xml
1 <c3p0-config>
2 <!-- 默認加載配置 -->
3 <default-config>
4 <property name="driverClass">com.mysql.jdbc.Driver</property>
5 <property name="jdbcUrl">jdbc:mysql://localhost:3306/test01</property>
6 <property name="user">root</property>
7 <property name="password">123456</property>
8 <property name="initialPoolSize">5</property>
9 <property name="maxPoolSize">10</property>
10 </default-config>
11 <!-- 指定名稱加載配置 -->
12 <named-config name="C3P0TestName">
13 <property name="driverClass">com.mysql.jdbc.Driver</property>
14 <property name="jdbcUrl">jdbc:mysql://localhost:3306/test01</property>
15 <property name="user">root</property>
16 <property name="password">123456</property>
17 <property name="initialPoolSize">5</property>
18 <property name="maxPoolSize">10</property>
19 </named-config>
20
21 </c3p0-config>
二、簡單編寫一個工具類,方便代碼調用
1 import java.sql.Connection; 2 import org.apache.commons.dbutils.QueryRunner; 3
4 import com.mchange.v2.c3p0.ComboPooledDataSource; 5
6
7 public class JdbcUtil { 8 private static ComboPooledDataSource dataSource = null; 9 static{ 10 //初始化操做 11 // 自動加載src目錄下c3p0的配置文件【c3p0-config.xml】
12 dataSource = new ComboPooledDataSource();// 使用默認的配置 13 //使用c3p0-config.xml配置文件中named-config的name屬性爲C3P0TestName的配置 14 //dataSource = new ComboPooledDataSource("C3P0TestName");
15 } 16
17 //獲取QueryRunner對象
18 public static QueryRunner getQueryRunner(){ 19 return new QueryRunner(dataSource); 20 } 21 //獲取鏈接純 經過c3p0核心類對象獲取(此例子沒用到該方法)
22 public static Connection getConnection(){ 23 try { 24 return dataSource.getConnection(); 25 } catch (Exception e) { 26 e.printStackTrace(); 27 throw new RuntimeException(e); 28 } 29 } 30 }
三、執行測試
1 @Test 2 public void test1() { 3 List<Student> list = null; 4 try { 5 Connection conn = JdbcUtil.getConnection(); 6 list = JdbcUtil.getQueryRunner().query("select * from Student"
7 , new BeanListHandler<Student>(Student.class)); 8 } catch (Exception e) { 9 e.printStackTrace(); 10 throw new RuntimeException(e); 11 } 12 if(list !=null){ 13 for (Student student : list) { 14 System.out.println(student); 15 } 16 } 17 }
完畢.