是 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 }
完毕.