1.pom配置
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
</dependencies>
2.c3p0配置文件
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/student?characterEncoding=UTF-8</property>
<property name="user">root</property>
<property name="password"/>
<property name="initialPoolsize">10</property>
<property name="checkoutTimeout">30000</property>
<property name="maxPoolSize">50</property>
<property name="minPoolSize">10</property>
</default-config>
</c3p0-config>
3.Dao
package com.Dao;
import com.Util.JDBC;
import com.domian.Student;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class StudentDao {
private Connection connection=null;
private String sql=null;
private PreparedStatement pst=null;
private ResultSet rs=null;
public List<Student> findAll(String sql) throws SQLException {
this.sql=sql;
connection= JDBC.getConnection();
pst=connection.prepareStatement(this.sql);
rs=pst.executeQuery();
List<Student> list=new ArrayList<>();
while (rs.next()){
Student student=new Student();
student.setName(rs.getString("name"));
student.setId(rs.getInt("id"));
list.add(student);
}
close();
return list;
}
public int update(String sql) throws SQLException {
connection= JDBC.getConnection();
pst=connection.prepareStatement(sql);
int num=0;
num=pst.executeUpdate();
close();
return num;
}
public void close() throws SQLException {
JDBC.close(connection,pst,rs);
}
}
4.util
package com.Util;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.*;
public class JDBC {
private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
/*static {
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setUser("root");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/student");
dataSource.setPassword("");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}*/
public static Connection getConnection() throws SQLException {
Connection connection=dataSource.getConnection();
return connection;
}
public static void close(Connection con, PreparedStatement pst, ResultSet rs) throws SQLException {
if(rs!=null){
rs.close();
}
if(pst!=null){
pst.close();
}
if (con!=null){
con.close();
}
}
}
5.Test
package com.AQS;
import com.Dao.StudentDao;
import com.Util.JDBC;
import com.domian.Student;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class TestDao {
public static void main(String[] args) throws SQLException {
CacheDao studentDao=new CacheDao();
String sql="select * from man";
List<Student> list=studentDao.findAll(sql);
System.out.println(list);
System.out.println("_________________");
List<Student> a=studentDao.findAll(sql);
System.out.println(a);
System.out.println("更新.....");
String update="update man set name='陈' where id=4";
studentDao.update(update);
System.out.println("更新后");
System.out.println(studentDao.findAll(sql));
}
}
class CacheDao extends StudentDao{
private StudentDao studentDao=new StudentDao();
private ReentrantReadWriteLock rw=new ReentrantReadWriteLock();
Map<String,List<Student>> map=new HashMap<>();
@Override
public List<Student> findAll(String sql) throws SQLException {
List<Student>list=new ArrayList<>();
//先从缓存中查询
rw.readLock().lock();
try {
list= map.get(sql);
if(list!=null&&list.size()!=0){
System.out.println("哈哈哈");
return list;
}
}finally {
rw.readLock().unlock();
}
rw.writeLock().lock();
try {
//缓存没有,查询数据库
list=map.get(sql);
if(list!=null&&list.size()!=0) return list;
list = studentDao.findAll(sql);
//添加到缓存
map.put(sql, list);
return list;
}finally {
rw.writeLock().unlock();
}
}
@Override
public int update(String sql) throws SQLException {
int num=studentDao.update(sql);
map.clear();
return num;
}
}