html电子商务网站模版,江门学做网站课程,东莞重大项目建设,北京最富裕的三个区目录 一、说明二、代码示例2.1 pom依赖2.2 示例代码2.3 实体类 三、示例截图 一、说明 1.针对于读多写少的情况 2.先查缓存#xff0c;没有再去查库
二、代码示例
2.1 pom依赖
?xml version1.0 encodingUTF-8?
project xmlnsh… 目录 一、说明二、代码示例2.1 pom依赖2.2 示例代码2.3 实体类 三、示例截图 一、说明 1.针对于读多写少的情况 2.先查缓存没有再去查库
二、代码示例
2.1 pom依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.learning/groupIdartifactIdjdbc/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.21/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.26/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.6/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.16/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.26/version/dependency/dependencies
/project2.2 示例代码
package com.learning;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.cache.CacheKey;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;public class DataCache {private ReentrantReadWriteLock reentrantReadWriteLock new ReentrantReadWriteLock();private MapCacheKey, Object map new HashMap();private static DruidDataSource druidDataSource new DruidDataSource();private static JdbcTemplate jdbcTemplate;static {druidDataSource.setUrl(jdbc:mysql://127.0.0.1:3306/test?useSSLfalseuseUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNulltransformedBitIsBooleantrueserverTimezoneGMT%2B8nullCatalogMeansCurrenttrueallowPublicKeyRetrievaltrue);druidDataSource.setUsername(root);druidDataSource.setPassword(root);jdbcTemplate new JdbcTemplate(druidDataSource);}public T T queryOne(ClassT beanClass, String sql, Object... args){// 从缓存中查找找到则直接返回CacheKey key new CacheKey(new Object[]{sql, args});reentrantReadWriteLock.readLock().lock();try{T value (T)map.get(key);if(value ! null){return value;}}finally{reentrantReadWriteLock.readLock().unlock();}reentrantReadWriteLock.writeLock().lock();try{// 多个线程再获取一遍检查一下是否有线程写入成功了T value (T) map.get(key);if(value null){// 缓存中没有查询数据库value queryDatabase(beanClass, sql, args);map.put(key, value);}return value;}finally {reentrantReadWriteLock.writeLock().unlock();}}private T T queryDatabase(ClassT beanClass, String sql, Object[] args) {BeanPropertyRowMapper beanPropertyRowMapper new BeanPropertyRowMapperT();beanPropertyRowMapper.setMappedClass(beanClass);System.out.println(sql:sql);ListT list jdbcTemplate.query(sql, args, beanPropertyRowMapper);return list.get(0);}public static void main(String[] args) {DataCache dataCache new DataCache();String sql select * from student where id ?;Object[] param new Object[]{1};for (int i 0; i 10; i) {new Thread(()-{Student student dataCache.queryOne(Student.class, sql, param);System.out.println(student);;}).start();}}
}2.3 实体类
package com.learning;import lombok.Data;Data
public class Student {private String id;private String name;private int age;
}三、示例截图