Part06 中州养老项目实训 ☀️
Part06 中州养老项目实训 ☀️
今日目标
实战开发
- 查看所有房型
- 分页查询护理服务列表
- 护理服务详情查询
拓展
- redis优化
1. 接口开发实战
开发流程:
- 查看接口文档,明确入参和出参
- 编写Controller代码
- 编写Mapper接口和Mapper映射配置文件
- 微信小程序测试
1.1 查看所有房型 🎯
查看所有房型
代码操作
开发流程:
- 编写Controller代码
- 编写Mapper接口和Mapper映射配置文件
- 微信小程序测试
1 在Controller中添加方法

注意: 可以通过@Autowired注解,从IOC容器中获取指定类型的对象并赋值给成员变量
3 在Mapper接口中添加方法
Mapper.xml映射文件的内容
微信小程序测试
1.2 分页查询护理服务列表 🎯
分页查询护理服务列表
代码操作
开发流程:
- 编写Controller代码
- 编写Mapper接口和Mapper映射配置文件
- 微信小程序测试
1 在Controller中添加方法

注意: 可以通过@Autowired注解,从IOC容器中获取指定类型的对象并赋值给成员变量
3 在Mapper接口中添加方法
Mapper.xml映射文件的内容
微信小程序测试
1.3 护理服务详情查询 🎯
护理服务详情查询
代码操作
开发流程:
- 编写Controller代码
- 编写Mapper接口和Mapper映射配置文件
- 微信小程序测试
1 在Controller中添加方法

注意: 可以通过@Autowired注解,从IOC容器中获取指定类型的对象并赋值给成员变量
3 在Mapper接口中添加方法
Mapper.xml映射文件的内容
微信小程序测试
2 Redis操作
SpringCache和Redis操作
前面我们已经实现了移动端房型查看功能,且放在首页,因此会被用户频繁访问,进而对数据库查询操作。在高并发 的情况下,频繁查询数据库会导致系统性能下降 ,服务端响应时间增长。现在需要对此方法进行缓存优化,提高系统的性能。(如下图)

SpringCache是一个框架,实现了基于注解的缓存功能 ,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。
Spring Cache 只是提供了一层抽象,底层可以切换不同的 cache 实现。具体就是通过CacheManager 接口 来统一不同的缓存技术。CacheManager 是 Spring 提供的各种缓存技术抽象接口。
针对不同的缓存技术需要实现不同的 CacheManager:
CacheManager | 描述 |
---|---|
EhCacheCacheManager | 使用 EhCache 作为缓存技术 |
GuavaCacheManager | 使用 Google 的 GuavaCache 作为缓存技术 |
RedisCacheManager | 使用 Redis 作为缓存技术 |
在 SpringCache 中提供了很多缓存操作的注解,常见的是以下的几个:
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能 |
@Cacheable | 在方法执行前 spring 先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
在 spring boot 项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching
开启缓存支持即可。
例如,使用 Redis 作为缓存技术,只需要导入 Spring data Redis 的 maven 坐标即可。
代码操作
由于 SpringCache 的基本功能是 Spring 核心(spring-context)中提供的,所以目前我们进行简单的 SpringCache 测试,是可以不用额外引入其他依赖的。 可以检查是否导入了下列依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
1). 引导类上加@EnableCaching
在引导类上加该注解,就代表当前项目开启缓存注解功能。

在 XXXController 的 list 方法上加入@Cacheable
注解
在进行数据查询时,我们需要根据roomCache和status状态进行查询,所以我们在缓存数据时,可以将roomCache和status状态组合起来作为key,如: roomCache::1
@RestController
public class RoomTypeController {
@Autowired
private RoomTypeMapper roomTypeMapper;
@GetMapping("/customer/roomTypes")
@Cacheable(value = "roomCache",key = "#status")
public Result<List<RoomType>> findAll(Integer status){
List<RoomType> rts = roomTypeMapper.select(status);
//System.out.println(rts);
return Result.success(rts);
}
}
为了保证数据库中数据与缓存数据的一致性,在我们添加房间类型或者房间类型数据之后,需要清空当前房间类型缓存的全部数据。那么@CacheEvict
注解如何清除某一份缓存下所有的数据呢,这里我们可以指定@CacheEvict
中的一个属性 allEnties,将其设置为 true 即可。
@PostMapping
@CacheEvict(value = "roomCache",allEntries = true) //清除roomCache名称下,所有的缓存数据
public Result 增删改方法(.....) {
}

上述确实能解决数据库频繁查询的问题,但是如果idea重启,缓存就消失了,下次启动idea得重新构建缓存,有没有一种缓存技术可以直接避免这种情况,提高缓存的可用性尼?
使用redis非关系型数据库即可
- 安装Redis,在非中文的路径下,解压焱哥发在微信群里的压缩包,点击运行startredis.bat 即可

点击运行startredis.bat 即可
- 在项目的pom.xml中添加redis依赖,点击右上角的刷新
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.4.5</version>
</dependency>

- 在项目的yml文件中添加redis链接配置
spring:
redis:
host: localhost
port: 6379
database: 0


反复点击发现,不会查询数据库

通过redis可视化软件,可以查看已经存入的数据,且关闭idea数据依然存在