zoukankan      html  css  js  c++  java
  • 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     @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 }
    View Code

    演示效果如下所示:


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

  • 相关阅读:
    九校联考-DL24凉心模拟Day2T2 整除(division)
    九校联考-DL24凉心模拟Day1T3 三米诺 (tromino)
    九校联考-DL24凉心模拟总结
    异常 日志-<多重catch语句>
    时间和日期实例-<Calender计算出生日期相差几天>
    时间和日期-<Date和SimpleDateFormat>
    实用类-<Math类常用>
    实用类-<字符串与基本类型的转换>
    实用类-<装箱与拆箱>
    HashMap的应用
  • 原文地址:https://www.cnblogs.com/biehongli/p/6536072.html
Copyright © 2011-2022 走看看