首先导入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;
}
}