6月 012018
 

最近刚发现apache 的commons下有个DBUtils, 封装了jdbc的实现,用起来真方便,分享一篇文章:https://www.cnblogs.com/biehongli/p/6536072.html

1DBUtils中的QueryRunner的使用:

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

1.2:主要有三个方法:

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

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

1.2.3batch():批处理;

2c3p0QueryRunner的结合使用:

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文件

<c3p0-config>
    
    <!– c3p0默认配置,下面还可以配置多个数据库 –>
    <default-config>
        <property name=”jdbcUrl”>jdbc:mysql://localhost:3306/test
        </property>
        <property name=”driverClass”>com.mysql.jdbc.Driver</property>
        <property name=”user”>root</property>
        <property name=”password”>123456</property>
        <property name=”initialPoolSize”>6</property>
        <property name=”maxPoolSize”>50</property>
        <property name=”maxIdleTime”>1000</property>
    </default-config>

</c3p0-config>

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

package com.bie.po;
/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午12:55:21 

*/
public class User {

    private int id;
    private String name;
    private String password;
    private String email;
    private String phone;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return “User [id=” + id + “, name=” + name + “, password=” + password + “, email=” + email + “, phone=” + phone
                + “]”;
    }
    
    
}

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

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

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

package com.bie.dao;

import java.util.List;

import com.bie.po.User;

/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午5:46:38 

*/
public interface UserDao {

    /***
     * 查询所有的用户信息
     * @return
     */
    public List<User> selectUser();
    
    /***
     * 根据编号查询
     * @param id
     * @return
     */
    public User selectUserId(int id);
    
    
    /***
     * 根据条件查询信息
     * @param user
     * @return
     */
    public List<User> select(String sql,List<Object> list);
    
    
}

package com.bie.dao.impl;

import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.bie.dao.UserDao;
import com.bie.po.User;
import com.bie.util.BaseUtils;

/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午5:47:35 

*/
public class UserDaoImpl implements UserDao{

    @Override
    public List<User> selectUser() {
        //创建QueryRunner
        //记住查询是BeanListHandler区别增删改的方法BeanHandler
        QueryRunner qr=BaseUtils.getQueryRunner();
        try {
            String sql=”select * from user “;
            //这句话就相当于之前写的下面这一长串代码,这就是QueryRunner的方便之处
            /***
             *User user=new User();
               user.setId(rs.getInt(“id”));
               user.setName(rs.getString(“name”));
               user.setPassword(rs.getString(“password”));
               user.setEmail(rs.getString(“email”));
               user.setPhone(rs.getString(“phone”));
             */
            return qr.query(sql, new BeanListHandler<User>(User.class));
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public User selectUserId(int id) {
        //创建QueryRunner
        QueryRunner qr=BaseUtils.getQueryRunner();
        String sql=”select * from user where id=? “;
        try {
            //使用QueryRunner的强大之处在于此处。
            return qr.query(sql,new BeanHandler<User>(User.class), id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public List<User> select(String sql,List<Object> list) {
        //创建QueryRunner
        QueryRunner qr=BaseUtils.getQueryRunner();
        try {
            //第一个参数是传来的sql,第二个是实现实体类的设置,第三个是集合转化为数组
            return qr.query(sql, new BeanListHandler<User>(User.class), list.toArray());
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    
}

这里将BaseUtils类写到这里,因为这个也是c3p0QueryRunner的核心

package com.bie.util;

import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午1:29:50 
* 数据库连接工具类
*/
public class BaseUtils {

    //初始化c3p0
    private static DataSource dataSource=null;
    
    static{
        //自动加载src目录下面的c3p0的配置文件,【c3p0-config.xml】
        dataSource = new ComboPooledDataSource();
    }
    
    public static QueryRunner getQueryRunner(){
        //第一步:创建QueryRunner对象,传入连接池对象
        //在创建QueryRunner对象的时候,如果传入数据对象dataSource,
        //那么在使用QueryRunner对象的方法时候,就不需要传入连接对象
        QueryRunner query=new QueryRunner(dataSource);
        //第二步:会自动从数据源中获取连接(不用关闭连接)
        return query;
    }
    
    /***
     * 实现增删改的公共方法
     * @param sql
     * @param arr
     * @return
     */
    public static boolean addUpdateDelete(String sql,Object[] arr){
        QueryRunner qr=getQueryRunner();
        int count;
        try {
            count = qr.update(sql, arr);
            if(count>0){
                return true;
            }else{
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
    
}

2.5:完成dao层和BaseUtils层之后可以直接在service层进行增删改,

package com.bie.service;

import java.util.List;

import com.bie.po.User;

/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午7:10:32 

*/
public interface UserService {

    /***
     * 根据条件查询用户信息
     * @param user
     * @return
     */
    public List<User> select(User user);
    
    /***
     * 添加用户信息
     * @param user
     * @return
     */
    public boolean insertUser(User user);
    
    /***
     * 修改用户的信息
     * @param user
     * @return
     */
    public boolean updateUser(User user);
    
    /***
     * 删除用户信息
     * @param id
     * @return
     */
    public boolean deleteUser(int id);
}

package com.bie.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User;
import com.bie.service.UserService;
import com.bie.util.BaseUtils;

/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午7:10:48 

*/
public class UserServiceImpl implements UserService{
    
    private UserDao dao=new UserDaoImpl();
    
    @Override
    public List<User> select(User user) {
        StringBuilder sql=new StringBuilder(“select * from user where 1=1 “);
        List<Object> list=new ArrayList<Object>();
        if(user!=null){
            //根据编号查询
            if(user.getId()!=0 && !””.equals(user.getId())){
                sql.append(” and id = ? “);
                list.add(user.getId());
            }
            
            //根据名称模糊查询,模糊查询”” %% “” ++
            if(user.getName()!=null && !””.equals(user.getName())){
                sql.append(” and name like ? “);
                list.add(“%”+user.getName()+”%”);
            }
        }
        
        return dao.select(sql.toString(), list);
    }

    @Override
    public boolean insertUser(User user) {
        String sql=”insert into user values(0,?,?,?,?)”;
        List<Object> list=new ArrayList<>();
        if(user!=null){
            list.add(user.getName());
            list.add(user.getPassword());
            list.add(user.getEmail());
            list.add(user.getPhone());
        }
        try {
            return BaseUtils.addUpdateDelete(sql, list.toArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean updateUser(User user) {
        String sql=”update user set name=?,password=?,email=?,phone=? where id=? “;
        List<Object> list=new ArrayList<>();
        if(user!=null){
            list.add(user.getName());
            list.add(user.getPassword());
            list.add(user.getEmail());
            list.add(user.getPhone());
            
            //根据编号修改信息
            list.add(user.getId());
        }
        
        try {
            return BaseUtils.addUpdateDelete(sql, list.toArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean deleteUser(int id) {
        String sql=”delete from user where id=? “;
        List<Object> list=new ArrayList<>();
        if(id!=0){
            //根据编号修改信息
            list.add(id);
        }
        
        try {
            return BaseUtils.addUpdateDelete(sql, list.toArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    
}

2.6:使用junit测试,完成使用c3p0QueryRunner的练习;

package com.bie.test;

import java.util.List;

import org.junit.Test;

import com.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User;
import com.bie.service.UserService;
import com.bie.service.impl.UserServiceImpl;

/** 
* @author BieHongLi 
* @version 创建时间:2017年3月11日 下午5:57:25 

*/
public class QueryRunnerTest {

    private UserDao dao=new UserDaoImpl();
    private UserService service=new UserServiceImpl();
    
    //查询所有信息的测试
    @Test
    public void selectUser(){
        List<User> list=dao.selectUser();
        for(User u:list){
            System.out.println(u);
        }
    }
    
    //根绝id查询的信息
    @Test
    public void selectUserId(){
        User user=dao.selectUserId(1);
        System.out.println(user);
    }
    
    //根据条件查询信息
    @Test
    public void select(){
        User user=new User();
        user.setName(“张三”);
        List<User> list=service.select(user);
        for(User u:list){
            System.out.println(u);
        }
    }
    
    @Test
    public void insertUser(){
        User user=new User();
        user.setName(“张三”);
        user.setPassword(“123456”);
        user.setEmail(“1748@qq.com”);
        user.setPhone(“11223”);
        
        boolean mark=service.insertUser(user);
        if(mark){
            System.out.println(“插入成功”);
        }else{
            System.out.println(“插入失败”);
        }
    }
    
    
    @Test
    public void update(){
        User user=new User();
        user.setName(“李四”);
        user.setId(1);
        
        boolean mark=service.updateUser(user);
        if(mark){
            System.out.println(“修改成功”);
        }else{
            System.out.println(“修改失败”);
        }
    }
    
    @Test
    public void delete(){
        boolean mark=service.deleteUser(1);
        if(mark){
            System.out.println(“用户信息删除成功”);
        }else{
            System.out.println(“用户信息删除失败”);
        }
    }
    
}

Sorry, the comment form is closed at this time.