c3p0

 
c3p0的配置
1. 使用c3p0数据库连接池实现连接
    1.1. 需要引入c3p0 .jar 包
    1.2. 新建配置文件[src 目录下面新建c3p0-config.xml]
<?xml version="1.0" encoding="UTF-8"?>
 
<c3p0-config>
 
    <named-config name="mvcapp">
 
        <property name="user">root</property>
        <property name="password"></property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/java</property>
 
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">10</property>
        <property name="maxPoolSize">50</property>
 
        <property name="maxStatements">20</property>
        <property name="maxStatementsPerConnection">5</property>
    </named-config>
 
</c3p0-config>
 
JdbcUtils.java
负责连接数据库
 
package com.curtis.jdbc;
 
import java.sql.Connection;
import java.sql.SQLException;
 
import javax.sql.DataSource;
 
import com.mchange.v2.c3p0.ComboPooledDataSource;
 
public class JdbcUtils {
 
    private static DataSource dataSource = null;
 
    static {
        // 数据源只能被创建一次
        // 这个mvcapp跟数据库连接池里面的对应
        dataSource = new ComboPooledDataSource("mvcapp");
    }
 
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
 
    public static void releaseConnection(Connection connection) {
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
DAO.java[带泛型的参数]
接口:数据库交互用到方法[查询所有记录、查询单条记录、增删改、查询单个值...]
package com.curtis.dao;
 
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
 
public interface DAO<T> {
 
    void batch(Connection connection, String sql, Object[]... args)
            throws SQLException;
 
    // 查询单个值
    <E> E getValue(Connection connection, String sql, Object... args)
            throws SQLException;
 
    // 查询所有数据
    List<T> getAllList(Connection connection, String sql, Object... args)
            throws SQLException;
 
    // 查询一条数据
    T getOne(Connection connection, String sql, Object... args)
            throws SQLException;
 
    // insert update delete
    void update(Connection connection, String sql, Object... args)
            throws SQLException;
 
}
 
JdbcDaoImpl.java[带泛型的参数]
通过QueryRunner 实现DAO接口里面的方法
package com.curtis.dao;
 
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
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 org.apache.commons.dbutils.handlers.ScalarHandler;
 
public class JdbcDaoImpl<T> implements DAO<T> {
 
    private QueryRunner queryRunner = null;
    private Class<T> clazz;
 
    // 构造函数
    @SuppressWarnings("unchecked")
    public JdbcDaoImpl() {
        queryRunner = new QueryRunner();
 
        Type superClass = getClass().getGenericSuperclass();
        if (superClass instanceof ParameterizedType) {
            ParameterizedType parameterizedType = (ParameterizedType) superClass;
            Type[] typeArgs = parameterizedType.getActualTypeArguments();
            if (typeArgs != null && typeArgs.length > 0) {
                if (typeArgs[0] instanceof Class) {
                    clazz = (Class<T>) typeArgs[0];
                }
            }
        }
    }
 
    @Override
    public void batch(Connection connection, String sql, Object[]... args)
            throws SQLException {
        queryRunner.batch(connection, sql, args);
    }
 
    @SuppressWarnings("unchecked")
    @Override
    public <E> E getValue(Connection connection, String sql, Object... args)
            throws SQLException {
        return (E) queryRunner
                .query(connection, sql, new ScalarHandler(), args);
    }
 
    @Override
    public List<T> getAllList(Connection connection, String sql, Object... args)
            throws SQLException {
        return queryRunner.query(connection, sql, new BeanListHandler<>(clazz),
                args);
    }
 
    @Override
    public T getOne(Connection connection, String sql, Object... args)
            throws SQLException {
        return queryRunner.query(connection, sql, new BeanHandler<>(clazz),
                args);
    }
 
    @Override
    public void update(Connection connection, String sql, Object... args)
            throws SQLException {
        queryRunner.update(connection, sql, args);
    }
 
}
 
实体类继承JdbcDaoImpl.java,指明具体的实体
package com.curtis.table;
 
public class Student {
 
    private int flow_id;
    private int type;
    private String id_card;
    private String student_name;
    private String location;
    private int grade;
 
    public int getFlow_id() {
        return flow_id;
    }
 
    public void setFlow_id(int flow_id) {
        this.flow_id = flow_id;
    }
 
    public int getType() {
        return type;
    }
 
    public void setType(int type) {
        this.type = type;
    }
 
    public String getId_card() {
        return id_card;
    }
 
    public void setId_card(String id_card) {
        this.id_card = id_card;
    }
 
    public String getStudent_name() {
        return student_name;
    }
 
    public void setStudent_name(String student_name) {
        this.student_name = student_name;
    }
 
    public String getLocation() {
        return location;
    }
 
    public void setLocation(String location) {
        this.location = location;
    }
 
    public int getGrade() {
        return grade;
    }
 
    public void setGrade(int grade) {
        this.grade = grade;
    }
 
    @Override
    public String toString() {
        return "Student [flow_id=" + flow_id + ", type=" + type + ", id_card="
                + id_card + ", student_name=" + student_name + ", location="
                + location + ", grade=" + grade + "]";
    }
 
}
 
package com.curtis.table;
 
import com.curtis.dao.JdbcDaoImpl;
 
public class StudentDao extends JdbcDaoImpl<Student> {
 
}
 
单元测试类测试各个方法是否愉快
@Test
    public void testGet() {
        Connection connection = null;
        try {
            connection = JdbcUtils.getConnection();
            String sql = "select flow_id,type,id_card,student_name,location,grade from student where flow_id=?";
            Student student=studentDao.getOne(connection, sql, 1001);
            System.out.println(student); 
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.releaseConnection(connection);
        }
    }
 
 
 
 
 
 
 
 
 
 
 
posted @ 2016-04-05 14:33  Curitis  阅读(211)  评论(0编辑  收藏  举报