C3P0 + apache的dbutils 实现公用的增删改查功能

首先导入C3P0、mysql连接、apache的dbutils 的jar包

jar包获取地址:http://www.mvnrepository.com/进入搜索关键字即可下载相应jar包

文档树构建

c3p0配置文件c3p0-config.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

	<!-- default-config 默认的配置,  -->
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost/bank</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
  </default-config>
  
   <!-- This app is massive! -->
  <named-config name="oracle"> 
    <property name="acquireIncrement">50</property>
    <property name="initialPoolSize">100</property>
    <property name="minPoolSize">50</property>
    <property name="maxPoolSize">1000</property>

    <!-- intergalactoApp adopts a different approach to configuring statement caching -->
    <property name="maxStatements">0</property> 
    <property name="maxStatementsPerConnection">5</property>

    <!-- he's important, but there's only one of him -->
    <user-overrides user="master-of-the-universe"> 
      <property name="acquireIncrement">1</property>
      <property name="initialPoolSize">1</property>
      <property name="minPoolSize">1</property>
      <property name="maxPoolSize">5</property>
      <property name="maxStatementsPerConnection">50</property>
    </user-overrides>
  </named-config>

 
</c3p0-config>
	

数据库连接池获取工具类  MyDataSource

package conn;

import org.apache.commons.dbcp.BasicDataSource;

/**
 * 单例模式
 * 
 * 
 * @author Administrator
 *
 */
public class MyDataSource extends  BasicDataSource{
    
    /**
     * 私有构造器,外部不能访问
     */
    private MyDataSource() {
        this.setDriverClassName("com.mysql.jdbc.Driver");
        setUrl("jdbc:mysql://172.31.88.78:3306/test?characterEncoding=utf8");
        setUsername("user");
        setPassword("user");
    }
    
    /**
     * 单例模式
     */
    private static final MyDataSource ds =new MyDataSource();
    public static MyDataSource newInstance() {
        return ds;
    }
    
    /**
     * 测试
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        System.out.println(MyDataSource.newInstance().getConnection());
    }
}
 

公用增删改查工具接口  IBaseDao

package dbUtil;

import java.io.Serializable;
import java.util.List;

/**
 * 公共的持久层接口
 * 
 * @author Administrator
 *
 */
public interface IBaseDao {
	
	public boolean add(String sql);

	public boolean add(String sql, Object[] params);

	public boolean update(String sql);

	public boolean update(String sql, Object[] params);

	public boolean delete(String sql);

	public boolean delete(String sql, Object[] params);

	public boolean delete(String sql, Serializable id);

	public List<?> query(String sql, Class clzss);

	public List<?> query(String sql, Class clzss, Object[] params);

	public Object find(String sql, Class clzss);

	public Object find(String sql, Class clzss, Object[] params);

	public int count(String sql);

	public int count(String sql, Object[] params);
}

IBaseDao的实现类IBaseDaoImp

package dbUtil.impl;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import javax.sql.DataSource;

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

import conn.MyDataSource;
import dbUtil.IBaseDao;

/**
 * 增删改都可以用update 实现
 * 
 * 查要用query实现
 * 
 * @author 游四海 email [email protected]
 * @Time 2018年9月27日  下午4:12:57
 */
public class BaseDaoImpl implements IBaseDao {
	
	//添加不指定参数,即sql语句中不指定insert的字段,要写全所有字段的数据
	public boolean add(String sql) {
		return add(sql, null);
	}

	//添加时指定参数
	@Override
	public boolean add(String sql, Object[] params) {
		return update(sql, params);
	}

	//更新时不指定参数,即sql语句中update的字段值已知
	@Override
	public boolean update(String sql) {
		return update(sql, null);
	}

	//更新时需要有变量参数
	public boolean update(String sql, Object[] params) {
		System.out.println("---sql:" + sql);
		System.out.println("---传递的 参数params:" + Arrays.toString(params));
		// 返回数据源
		DataSource dataSource = MyDataSource.newInstance();
		QueryRunner qr = new QueryRunner(dataSource);
		int num = -1;
		try {
			if (params == null || params.length == 0) { // 非预编译sql持久化
				num = qr.update(sql);
			} else { // 预编译sql持久化
				num = qr.update(sql, params);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return (num > 0 ? true : false);
	}

	//删除表
	@Override
	public boolean delete(String sql) {
		return delete(sql, null);
	}

	//删除符合条件的一行
	@Override
	public boolean delete(String sql, Object[] params) {
		return update(sql, params);
	}

	//删除指定id的行
	@Override
	public boolean delete(String sql, Serializable id) {
		return delete(sql, new Object[] { id });
	}

	//查询所有行
	@Override
	public List<?> query(String sql, Class clzss) {
		return query(sql, clzss, null);
	}

	//查询符合条件的所有行
	@Override
	public List<?> query(String sql, Class clzss, Object[] params) {
		System.out.println("---sql:" + sql);
		System.out.println("--传入的参数params:" + Arrays.toString(params));
		// 返回数据源
		DataSource dataSource = MyDataSource.newInstance();
		
		QueryRunner qr = new QueryRunner(dataSource);
		
		List<?> list = null;
		try {
			if (params == null || params.length == 0) { // 非预编译sql持久化
				list = (List<?>)qr.query(sql, new BeanListHandler(clzss));
			} else { // 预编译sql持久化
				list = (List<?>)qr.query(sql, new BeanListHandler(clzss), params);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return list;
	}

	//查询一行
	@Override
	public Object find(String sql, Class clzss) {
		return find(sql, clzss, null);
	}

	//查询符合条件的一行
	@Override
	public Object find(String sql, Class clzss, Object[] params) {
		List list = query(sql, clzss, params);
		if (list != null && list.size() > 0) {
			return list.get(0);
		}
		return null;
	}

	@Override
	public int count(String sql) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int count(String sql, Object[] params) {
		// TODO Auto-generated method stub
		return 0;
	}

}

猜你喜欢

转载自blog.csdn.net/bright_light12345/article/details/82897044