首页 > 代码库 > c3p0和QueryRunner的结合使用,让开发更加简便

c3p0和QueryRunner的结合使用,让开发更加简便

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     @Override45     public String toString() {46         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone47                 + "]";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      * @return17      */18     public List<User> selectUser();19     20     /***21      * 根据编号查询22      * @param id23      * @return24      */25     public User selectUserId(int id);26     27     28     /***29      * 根据条件查询信息30      * @param user31      * @return32      */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     @Override21     public List<User> selectUser() {22         //创建QueryRunner23         //记住查询是BeanListHandler区别增删改的方法BeanHandler24         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     @Override45     public User selectUserId(int id) {46         //创建QueryRunner47         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         //创建QueryRunner61         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     //初始化c3p020     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 sql39      * @param arr40      * @return41      */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 user17      * @return18      */19     public List<User> select(User user);20     21     /***22      * 添加用户信息23      * @param user24      * @return25      */26     public boolean insertUser(User user);27     28     /***29      * 修改用户的信息30      * @param user31      * @return32      */33     public boolean updateUser(User user);34     35     /***36      * 删除用户信息37      * @param id38      * @return39      */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     @Test25     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     @Test34     public void selectUserId(){35         User user=dao.selectUserId(1);36         System.out.println(user);37     }38     39     //根据条件查询信息40     @Test41     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     @Test51     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     @Test68     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     @Test82     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 }
View Code

演示效果如下所示:

技术分享


初试成功,等待复试(技术试),加油!!!奋斗吧,小青年

c3p0和QueryRunner的结合使用,让开发更加简便