一起养成写作习惯!这是我参加“一神论计划4月份经文挑战”的第25天。点击查看活动详细信息。
一、Spring Cache Abstraction
The spring framework provides support fojson数据r transparently adding caching to an application . at its core,The abstraction applies caspring面试
Sspring面试题pring高速缓存抽象是一组高速缓存规范,通过定义org . springframeworkjson . cache . cache和CacheManager的两个接口集成了不同的高速缓存技术
高速缓存接口mybatis面试题提供高速缓存组件的规范定义,并包含缓慢JSON内存的各种操作集合
高速缓存接数据结构教程第5版李春葆答案口下的弹簧提供了多种xxxCache实现数据结构c语言版本(RedisCache、EhCjson格式怎么打开acheCache、Concurre缓存视频变成本地视频ntMapCache等)
Cach缓存是什么意思eManager是管理各种缓存组件的缓存管理器
CacheManager和Cache的关系类似于数据库连接池和数据库连springmvc的工作原理接。
为了简化开发,Spring高速缓存抽象同时支持Jacache的注释,Jacache也是一组规范。
JCache定义了五个核心接口:
CachingProvjsonider:定义多个CacheManagerjson解析的创建、配置、导入、管理和控制,在运行过程中可以访问多个caching提springmvc的工作原理供程序
CaCaiderManager:创建、配置、导入、管理和控制存在于Cachemanager的j数据结构c语言版严蔚敏第二版答案sonp上下文中的多个唯一命名的ca高速缓存是指che。CacheManager只能MyBatis属于一mybatis框架个Cachismybatis一级缓存和二级缓存pringngProvjson
Cache:暂时储存类似快取的Map数目jsonp资料结构、金钥索引值。缓存只能属于一个CacheManager
条数据结构题库目:高速缓存
的Key-数据结构有哪些Value对为了简化开发,更多是使Spring用Spring的缓存抽象,Spring的缓存抽mybatis中$和井号区别象的底数据结构教程第5版李春葆答案层概念与JSR107是一致的
Spring 缓存抽象中的重要注解
- @Cacheable:根据方缓存清理法的请求参数对结果进行缓存
- @CacheEvict:清空缓存
- @CachePut:保证方法被调用,同时缓存结果缓存
- @EnableCachispspringcloudring是什么意思ng:开springcloud启基于注解的缓存
每次调用需要缓存功能的方法时,Spring会检查数据结构严蔚敏指定参数的执springmvc的工作原理行目标方法是否已经被调用过,如果有就直接从数据结构题库spring翻译缓存中获取方法调用后的结果,如果没数据结构严蔚敏有就调用目标方法并缓存结果json怎么读后返回给用户,下次再次调用的时候直接从缓存中获取
You can a数据结构c语言版第二版课后答案lso use the standard缓存视频合并 JSR-107 (JCache) annotations (such aJSONs @CacheResult) transparently. However, we strongly advise you to not mix and match the Spring Cache and JCache annotations.
Sprisjsonppring框架ng Boot 官方建议spring框架不要混用 Spring Cache 和mybatisplus JCache 的注解
工程搭建与测试
创建spring bomybatis中$和井号区别ot工程smybatisplusprimybatis怎么读ng-boot-cache
根据S缓存的视频在哪QL文件新建tesla、json格式怎么打开factory两数据结构有哪些张表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for factory
-- ----------------------------
DROP TABLE IF EXISTS `factory`;
CREATE TABLE `factory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`factory_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1166057542 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of factory
-- ----------------------------
BEGIN;
INSERT INTO `factory` VALUES (1, '上海特斯拉超级工厂');
INSERT INTO `factory` VALUES (2, '加州弗拉蒙特特斯拉超级工厂');
INSERT INTO `factory` VALUES (3, '得克萨斯州特斯拉超级工厂');
INSERT INTO `factory` VALUES (4, '柏林特斯拉超级工厂');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for tesla
-- ----------------------------
DROP TABLE IF EXISTS `tesla`;
CREATE TABLE `tesla` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` double(10,2) DEFAULT NULL,
`vehicle_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`factory_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1166057542 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tesla
-- ----------------------------
BEGIN;
INSERT INTO `tesla` VALUES (1166057520, 'Model 3P 2021', 280000.00, '四门轿车', 1);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
entity包下增加Tesla和Factory实体类
@Data
public class Tesla {
private Integer id;
private String name;
private Double price;
private String vehicleType;
private Integer factoryId;
}
@Data
public class Factory {
private Integer id;
private String factoryName;
}
application.ym数据结构c语言版第二版课后答案l中配置druid
spring:
datasource:
# driver可以不写,会根据连接自动判断
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test
druid:
# 初始化大小,最小,最大
initial-size: 5
max-active: 100
min-idle: 1
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存时间
min-evictable-idle-time-millis: 300000
# 用来检测连接是否有效的sql 必须是一个查询语句 注意没有此语句以下三个属性不会生效
validation-query: SELECT 1 FROM DUAL
# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false
# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-borrow: true
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
# 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
filters: stat,wall
# 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置 DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
# 配置 DruidStatViewServlet
stat-view-servlet:
url-pattern: /druid/*
# IP 白名单,没有配置或者为空,则允许所有访问
#allow: 127.0.0.1
# IP 黑名单,若白名单也存在,则优先使用
#deny: 192.168.31.253
# 禁用 HTML 中 Reset All 按钮
reset-enable: true
# 登录用户名/密码
login-username: root
login-password: 123
# 注意 此处必须开启,否则无法访问druid监控面板
enabled: true
use-global-data-source-stat: true
logging:
level:
# 输出mapper接口中方法执行的SQL语句
com.lilith.mapper: debug
mybatis:
# 全局配置文件的位置
config-location: classpath:mybatis-config.xml
mapper-locations: classpath:mappers/*.xml
# configuration:
# map-underscore-to-camel-case: true
debug: true
在mymybatisplusbatis-config.mybatis分页插件实现原理xml缓存视频合并app中配置MyBatis全局配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.lilith.entity"/>
</typeAliases>
</configuration>
mapper包下增加TeslaMapper和FactspringoryMapper两个接口,实现增删改查方法
public interface TeslaMapper {
void insert(Tesla tesla);
Tesla selectOneById(Integer id);
void update(Tesla tesla);
void deleteOneById(Integer id);
}
public interface FactoryMapper {
Factory selectOneById(Integer id);
void deleteOneById(Integer id);
void insert(Factory factory);
void update(Factory factory);
}
resourcmybatispluses目录下m数据结构教程第5版李春葆答案appers文件夹中的Mapper XML映射文件TeslaMap数据结构题库per.xml和FactoryMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lilith.mapper.TeslaMapper">
<sql id="Base_Columns_List">
id, name, price, vehicle_type, factory_id
</sql>
<select id="selectOneById" resultType="tesla">
select <include refid="Base_Columns_List" /> from tesla where id = #{id}
</select>
<insert id="insert">
INSERT INTO tesla (name, price, vehicle_type, factory_id)
VALUES (#{name}, #{price}, #{vehicleType},#{factoryId})
</insert>
<update id="update">
UPDATE tesla SET name = #{name}, price = #{price}, vehicle_type = #{vehicleType}, factory_id = #{factoryId}
WHERE id = #{id}
</update>
<delete id="deleteOneById">
DELETE FROM tesla WHERE id=#{id}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lilith.mapper.FactoryMapper">
<sql id="Base_Columns_List">
id, factory_name
</sql>
<select id="selectOneById" resultType="factory">
SELECT <include refid="Base_Columns_List" /> FROM factory WHERE id = #{id}
</select>
<delete id="deleteOneById">
DELETE FROM factory WHERE id=#{id}
</delete>
<insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO factory (factory_name)
VALUES (#{factoryName})
</insert>
<update id="update">
UPDATE factory SET factory_name = #{factoryName} where id = #{id}
</update>
</mapper>
初始化spring-boot-cache工程的步骤:
- 创建tesla和factory两张表
- spri数据结构c语言版ng-boot-cache中entity包下创建TJSONespring框架sla和Factory实体类
- 整合Druid数据源
- 配置MyBatis
- 新建TeslaMapp数据结构mybatis一级缓存和二级缓存c语言版第二版课后答案er、Factory数据结构Mapper并增加增删改查方法
- 测试TeslaMapper、FactoryMapper的增删改缓存查方法
在数据结构知识点总结配置完成数据访问层并测试成功之后,新建service包并在该目录下新增impl包,在springservice包中新增TeslaService接口并在impl包中新增TeslaService的实现类TeslaServiceIMyBatismpl
public interface TeslaService {
Tesla getTeslaById(Integer id);
}
@Service
@Slf4j
public class TeslaServiceImpl implements TeslaService {
@Autowired
private TeslaMapper teslaMapper;
@Override
public Tesla getTeslaById(Integer id) {
log.info("查询" + id + "特斯拉");
return teslaMapper.selectOneById(id);
}
}
新增controller包,spring增加TeslaController类,返回JSON格式数据
@RestController
public class TeslaController {
@Autowired
private TeslaService teslaService;
@GetMapping("/tesla/{id}")
public Tesla find(@PathVariable("id") Integer id){
Tesla teslaById = teslaService.getTeslaById(id);
return teslaById;
}
}
启动应用,测试Controller缓存类,不要忘了数据结构c语言版在主程序类上添加@MapperSc缓存是什么意思a数据结构c语缓存是什么意思言版第二版课后答案n扫描所有的Mapper接口
Spring Cache 的使用
首先在主程序类上使用@EnableCachimybatis中$和井号区别ng来开启基于注解的缓存
@Cacheable
在mybatis注解在TeslaServiceImpl类上的getTeslaBspring翻译yI缓存英文d()方法未添加@Cacheable注解之前,每一次查询都会调用数据库执行SQL语句,@Cacheable注解可以将方法运行的结果缓存,以后查询结果相同的spring翻译数据直接缓存中获取,不会在调数据结构实验报告用方法
增加@Cacheable注解后,添加ca缓存清理cheNames属性,重启应用,多次查询只会执行一次SQL语句
@Cacheable的几mybatis分页插件实现原理个属性
- cacheNames/valu数据结构实验报告e:指spring定缓存组件的名字
- keymybatis动态sql:缓存数据用的Key,可以用来来指定具体的缓存内容,默认使用的是方法的参数值,也可以通过缓存视频合并SpELjsonobject指定spring漏洞,如”#id”既获取方法的参数id,”#result”为方法执行json数据的结果
- keyGenerator:Key的生成器,可以自己指定Key的生成器组件id,key/keyGeneratospring翻译r二选一使用
- ca缓存的视频在哪cheManager:指定缓存管理器,或者Cachspring翻译eResolver指定获取解析器
- condition:指定符合条件的情况下才会缓存方法的执行结果,如果condition=”#id>0″
- unless:否定缓存,当unle缓存ss的条件为true时,方法的返回值不json格式会被缓mybatis怎么读存,如unless=”缓存视频变成本地视频#result==null”既当结果返回为nmybatiMyBatiss分页插spring框架件实现原理ulmybatis怎么读l时不缓存
- sync:是否使用异步模式
缓存SpELl表达式
名称 | 位置 | 描述 | 示缓存视频怎样转入相册例 |
---|---|---|---|
methodNammybatis怎么读e | root object | 当前被调用的方法名 | #root.met数据结构有哪些hodName |
method | root object | 当前被调用的方法 | #root.method.name |
target | root object | 当前被调缓存视频变成本地视频用的目标对象 | #root.taspringrget |
targespring翻译tClass | root object | 当前被调用的目标对象类 | #root.targetClasspring框架s |
args | rootmybatis框架 objejson数据ct | 当前被调用的参数列表 | #root.args[0] |
cachesspring是什么意思 | root object | 当前方法调用使用的缓存列表数据结构c语言版,@Cacheable(value={“cache1”, “cache2”}) | #root.caches.name[0] |
argumMyBatisent name | evaluation context | 方法参数的名字,可以直接 “缓存的视频在spring漏洞哪#参数名”, 也可以使用”#p0″或者”#a0″, 0代表索引 | #p0 |
result | evaluation context | 方法执行后的返回值,仅当该结果会被缓存时才可使用 | #result |