1:DBUtils中的QueryRunner的使用:

  1.1:QueryRunner中提供了对SQL语句操作的api;

  1.2:主要有三个方法:

    1.2.1:query():用于执行select(查询);

    1.2.2:update():用于执行insert(插入)/update(更新)/delete(删除);

    1.2.3:batch():批处理;


2:c3p0和QueryRunner的结合使用:

  2.1:首先导包,如下所示的包;

    c3p0-0.9.1.2.jar
    commons-dbutils-1.6.jar
    mysql-connector-java-5.1.12-bin.jar  

   2.2:当然导包之前你需要创建好数据库和数据表哦!~~~ 

      在src目录下面记住配置c3p0-config.xml文件

 1 <c3p0-config> 
 2      
 3     <!-- c3p0默认配置,下面还可以配置多个数据库 --> 
 4     <default-config> 
 5         <property name="jdbcUrl">jdbc:mysql://localhost:3306/test 
 6         </property> 
 7         <property name="driverClass">com.mysql.jdbc.Driver</property> 
 8         <property name="user">root</property> 
 9         <property name="password">123456</property> 
10         <property name="initialPoolSize">6</property> 
11         <property name="maxPoolSize">50</property> 
12         <property name="maxIdleTime">1000</property> 
13     </default-config> 
14  
15 </c3p0-config>

   2.3:创建实体类,如User.java,源码如下,

 1 package com.bie.po; 
 2 /**  
 3 * @author BieHongLi  
 4 * @version 创建时间:2017年3月11日 下午12:55:21  
 5 *  
 6 */ 
 7 public class User { 
 8  
 9     private int id; 
10     private String name; 
11     private String password; 
12     private String email; 
13     private String phone; 
14     public int getId() { 
15         return id; 
16     } 
17     public void setId(int id) { 
18         this.id = id; 
19     } 
20     public String getName() { 
21         return name; 
22     } 
23     public void setName(String name) { 
24         this.name = name; 
25     } 
26     public String getPassword() { 
27         return password; 
28     } 
29     public void setPassword(String password) { 
30         this.password = password; 
31     } 
32     public String getEmail() { 
33         return email; 
34     } 
35     public void setEmail(String email) { 
36         this.email = email; 
37     } 
38     public String getPhone() { 
39         return phone; 
40     } 
41     public void setPhone(String phone) { 
42         this.phone = phone; 
43     } 
44     @Override 
45     public String toString() { 
46         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone 
47                 + "]"; 
48     } 
49      
50      
51 }
View Code

  2.4:创建好实体类之后就可以根据MVC模式分层进行开发,这里只是模拟,所以创建dao层和servic层和test层。test层进行测试;

    所以先创建dao层进行创建接口,再创建实现接口的类,当然实现c3p0和QueryRunner的关键代码就是dao层哦,切记;

    当然了还有工具类utils层提取的公共的方法;

 1 package com.bie.dao; 
 2  
 3 import java.util.List; 
 4  
 5 import com.bie.po.User; 
 6  
 7 /**  
 8 * @author BieHongLi  
 9 * @version 创建时间:2017年3月11日 下午5:46:38  
10 *  
11 */ 
12 public interface UserDao { 
13  
14     /*** 
15      * 查询所有的用户信息 
16      * @return 
17      */ 
18     public List<User> selectUser(); 
19      
20     /*** 
21      * 根据编号查询 
22      * @param id 
23      * @return 
24      */ 
25     public User selectUserId(int id); 
26      
27      
28     /*** 
29      * 根据条件查询信息 
30      * @param user 
31      * @return 
32      */ 
33     public List<User> select(String sql,List<Object> list); 
34      
35      
36 }
View Code
 1 package com.bie.dao.impl; 
 2  
 3 import java.util.List; 
 4  
 5 import org.apache.commons.dbutils.QueryRunner; 
 6 import org.apache.commons.dbutils.handlers.BeanHandler; 
 7 import org.apache.commons.dbutils.handlers.BeanListHandler; 
 8  
 9 import com.bie.dao.UserDao; 
10 import com.bie.po.User; 
11 import com.bie.util.BaseUtils; 
12  
13 /**  
14 * @author BieHongLi  
15 * @version 创建时间:2017年3月11日 下午5:47:35  
16 *  
17 */ 
18 public class UserDaoImpl implements UserDao{ 
19  
20     @Override 
21     public List<User> selectUser() { 
22         //创建QueryRunner 
23         //记住查询是BeanListHandler区别增删改的方法BeanHandler 
24         QueryRunner qr=BaseUtils.getQueryRunner(); 
25         try { 
26             String sql="select * from user "; 
27             //这句话就相当于之前写的下面这一长串代码,这就是QueryRunner的方便之处 
28             /*** 
29              *User user=new User(); 
30                user.setId(rs.getInt("id")); 
31                user.setName(rs.getString("name")); 
32                user.setPassword(rs.getString("password")); 
33                user.setEmail(rs.getString("email")); 
34                user.setPhone(rs.getString("phone")); 
35              */ 
36             return qr.query(sql, new BeanListHandler<User>(User.class)); 
37              
38         } catch (Exception e) { 
39             e.printStackTrace(); 
40         } 
41         return null; 
42     } 
43  
44     @Override 
45     public User selectUserId(int id) { 
46         //创建QueryRunner 
47         QueryRunner qr=BaseUtils.getQueryRunner(); 
48         String sql="select * from user where id=? "; 
49         try { 
50             //使用QueryRunner的强大之处在于此处。 
51             return qr.query(sql,new BeanHandler<User>(User.class), id); 
52         } catch (Exception e) { 
53             e.printStackTrace(); 
54         } 
55         return null; 
56     } 
57  
58  
59     public List<User> select(String sql,List<Object> list) { 
60         //创建QueryRunner 
61         QueryRunner qr=BaseUtils.getQueryRunner(); 
62         try { 
63             //第一个参数是传来的sql,第二个是实现实体类的设置,第三个是集合转化为数组 
64             return qr.query(sql, new BeanListHandler<User>(User.class), list.toArray()); 
65              
66         } catch (Exception e) { 
67             e.printStackTrace(); 
68         } 
69         return null; 
70     } 
71  
72      
73 }

  这里将BaseUtils类写到这里,因为这个也是c3p0和QueryRunner的核心啊!!!

 1 package com.bie.util; 
 2  
 3 import java.sql.SQLException; 
 4 import java.util.List; 
 5  
 6 import javax.sql.DataSource; 
 7  
 8 import org.apache.commons.dbutils.QueryRunner; 
 9  
10 import com.mchange.v2.c3p0.ComboPooledDataSource; 
11  
12 /**  
13 * @author BieHongLi  
14 * @version 创建时间:2017年3月11日 下午1:29:50  
15 * 数据库连接工具类 
16 */ 
17 public class BaseUtils { 
18  
19     //初始化c3p0 
20     private static DataSource dataSource=null; 
21      
22     static{ 
23         //自动加载src目录下面的c3p0的配置文件,【c3p0-config.xml】 
24         dataSource = new ComboPooledDataSource(); 
25     } 
26      
27     public static QueryRunner getQueryRunner(){ 
28         //第一步:创建QueryRunner对象,传入连接池对象 
29         //在创建QueryRunner对象的时候,如果传入数据对象dataSource, 
30         //那么在使用QueryRunner对象的方法时候,就不需要传入连接对象 
31         QueryRunner query=new QueryRunner(dataSource); 
32         //第二步:会自动从数据源中获取连接(不用关闭连接) 
33         return query; 
34     } 
35      
36     /*** 
37      * 实现增删改的公共方法 
38      * @param sql 
39      * @param arr 
40      * @return 
41      */ 
42     public static boolean addUpdateDelete(String sql,Object[] arr){ 
43         QueryRunner qr=getQueryRunner(); 
44         int count; 
45         try { 
46             count = qr.update(sql, arr); 
47             if(count>0){ 
48                 return true; 
49             }else{ 
50                 return false; 
51             } 
52         } catch (SQLException e) { 
53             e.printStackTrace(); 
54         } 
55         return false; 
56     } 
57      
58 }

  2.5:完成dao层和BaseUtils层之后可以直接在service层进行增删改,dao层就不用写了;

 1 package com.bie.service; 
 2  
 3 import java.util.List; 
 4  
 5 import com.bie.po.User; 
 6  
 7 /**  
 8 * @author BieHongLi  
 9 * @version 创建时间:2017年3月11日 下午7:10:32  
10 *  
11 */ 
12 public interface UserService { 
13  
14     /*** 
15      * 根据条件查询用户信息 
16      * @param user 
17      * @return 
18      */ 
19     public List<User> select(User user); 
20      
21     /*** 
22      * 添加用户信息 
23      * @param user 
24      * @return 
25      */ 
26     public boolean insertUser(User user); 
27      
28     /*** 
29      * 修改用户的信息 
30      * @param user 
31      * @return 
32      */ 
33     public boolean updateUser(User user); 
34      
35     /*** 
36      * 删除用户信息 
37      * @param id 
38      * @return 
39      */ 
40     public boolean deleteUser(int id); 
41 }
View Code
  1 package com.bie.service.impl; 
  2  
  3 import java.util.ArrayList; 
  4 import java.util.List; 
  5  
  6 import com.bie.dao.UserDao; 
  7 import com.bie.dao.impl.UserDaoImpl; 
  8 import com.bie.po.User; 
  9 import com.bie.service.UserService; 
 10 import com.bie.util.BaseUtils; 
 11  
 12 /**  
 13 * @author BieHongLi  
 14 * @version 创建时间:2017年3月11日 下午7:10:48  
 15 *  
 16 */ 
 17 public class UserServiceImpl implements UserService{ 
 18      
 19     private UserDao dao=new UserDaoImpl(); 
 20      
 21     @Override 
 22     public List<User> select(User user) { 
 23         StringBuilder sql=new StringBuilder("select * from user where 1=1 "); 
 24         List<Object> list=new ArrayList<Object>(); 
 25         if(user!=null){ 
 26             //根据编号查询 
 27             if(user.getId()!=0 && !"".equals(user.getId())){ 
 28                 sql.append(" and id = ? "); 
 29                 list.add(user.getId()); 
 30             } 
 31              
 32             //根据名称模糊查询,模糊查询"" %% "" ++ 
 33             if(user.getName()!=null && !"".equals(user.getName())){ 
 34                 sql.append(" and name like ? "); 
 35                 list.add("%"+user.getName()+"%"); 
 36             } 
 37         } 
 38          
 39         return dao.select(sql.toString(), list); 
 40     } 
 41  
 42     @Override 
 43     public boolean insertUser(User user) { 
 44         String sql="insert into user values(0,?,?,?,?)"; 
 45         List<Object> list=new ArrayList<>(); 
 46         if(user!=null){ 
 47             list.add(user.getName()); 
 48             list.add(user.getPassword()); 
 49             list.add(user.getEmail()); 
 50             list.add(user.getPhone()); 
 51         } 
 52         try { 
 53             return BaseUtils.addUpdateDelete(sql, list.toArray()); 
 54         } catch (Exception e) { 
 55             e.printStackTrace(); 
 56         } 
 57         return false; 
 58     } 
 59  
 60     @Override 
 61     public boolean updateUser(User user) { 
 62         String sql="update user set name=?,password=?,email=?,phone=? where id=? "; 
 63         List<Object> list=new ArrayList<>(); 
 64         if(user!=null){ 
 65             list.add(user.getName()); 
 66             list.add(user.getPassword()); 
 67             list.add(user.getEmail()); 
 68             list.add(user.getPhone()); 
 69              
 70             //根据编号修改信息 
 71             list.add(user.getId()); 
 72         } 
 73          
 74         try { 
 75             return BaseUtils.addUpdateDelete(sql, list.toArray()); 
 76         } catch (Exception e) { 
 77             e.printStackTrace(); 
 78         } 
 79         return false; 
 80     } 
 81  
 82     @Override 
 83     public boolean deleteUser(int id) { 
 84         String sql="delete from user where id=? "; 
 85         List<Object> list=new ArrayList<>(); 
 86         if(id!=0){ 
 87             //根据编号修改信息 
 88             list.add(id); 
 89         } 
 90          
 91         try { 
 92             return BaseUtils.addUpdateDelete(sql, list.toArray()); 
 93         } catch (Exception e) { 
 94             e.printStackTrace(); 
 95         } 
 96         return false; 
 97     } 
 98  
 99      
100 }
View Code

  2.6:使用junit测试,完成使用c3p0和QueryRunner的练习;

 1 package com.bie.test; 
 2  
 3 import java.util.List; 
 4  
 5 import org.junit.Test; 
 6  
 7 import com.bie.dao.UserDao; 
 8 import com.bie.dao.impl.UserDaoImpl; 
 9 import com.bie.po.User; 
10 import com.bie.service.UserService; 
11 import com.bie.service.impl.UserServiceImpl; 
12  
13 /**  
14 * @author BieHongLi  
15 * @version 创建时间:2017年3月11日 下午5:57:25  
16 *  
17 */ 
18 public class QueryRunnerTest { 
19  
20     private UserDao dao=new UserDaoImpl(); 
21     private UserService service=new UserServiceImpl(); 
22      
23     //查询所有信息的测试 
24     @Test 
25     public void selectUser(){ 
26         List<User> list=dao.selectUser(); 
27         for(User u:list){ 
28             System.out.println(u); 
29         } 
30     } 
31      
32     //根绝id查询的信息 
33     @Test 
34     public void selectUserId(){ 
35         User user=dao.selectUserId(1); 
36         System.out.println(user); 
37     } 
38      
39     //根据条件查询信息 
40     @Test 
41     public void select(){ 
42         User user=new User(); 
43         user.setName("张三"); 
44         List<User> list=service.select(user); 
45         for(User u:list){ 
46             System.out.println(u); 
47         } 
48     } 
49      
50     @Test 
51     public void insertUser(){ 
52         User user=new User(); 
53         user.setName("张三"); 
54         user.setPassword("123456"); 
55         user.setEmail("1748@qq.com"); 
56         user.setPhone("11223"); 
57          
58         boolean mark=service.insertUser(user); 
59         if(mark){ 
60             System.out.println("插入成功"); 
61         }else{ 
62             System.out.println("插入失败"); 
63         } 
64     } 
65      
66      
67     @Test 
68     public void update(){ 
69         User user=new User(); 
70         user.setName("李四"); 
71         user.setId(1); 
72          
73         boolean mark=service.updateUser(user); 
74         if(mark){ 
75             System.out.println("修改成功"); 
76         }else{ 
77             System.out.println("修改失败"); 
78         } 
79     } 
80      
81     @Test 
82     public void delete(){ 
83         boolean mark=service.deleteUser(1); 
84         if(mark){ 
85             System.out.println("用户信息删除成功"); 
86         }else{ 
87             System.out.println("用户信息删除失败"); 
88         } 
89     } 
90      
91 }
发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

C3p0数据库连接池的使用知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。