SpringBoot环境下使用mybatis整合redis第三方缓存
默认大家已经搭建好环境,安装好redis…直接开始
建好项目,导入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
具体情况根据自己的需要导入相关依赖…
配置RedisTemplate
RedisTemplate用来操作redis…
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
由于我是打算把数据库中的记录查询之后保存在redis中,所以我接下来则按照数据库中的表写对应的bean类(这个步骤根据个人需求,按照自己所需的来操作)
Bean对象
别忘了序列化哦!!!
Dao层
测试
@SpringBootTest
class SpringbootApplicationTests {
@Resource
AccountDao accountDao;
@Resource
RedisTemplate redisTemplate;
@Test
void contextLoads() {
ValueOperations<String,Account> operations = redisTemplate.opsForValue();
Account account=null;
String key="Account"+5;
Boolean flag = redisTemplate.hasKey(key);
if (flag){
System.out.println("Redis获取数据中......");
account = operations.get(key);
}else {
System.out.println("数据库获取数据中......");
account=accountDao.selectAccountById(5);
System.out.println("Redis插入数据中......");
operations.set(key,account);
}
System.out.println(account);
// System.out.println(accountDao.selectAccountById(5));
// System.out.println(accountDao.count());
}
先使用redisTemple查看redis中是否存在需要的信息(key),若有则取出,没有则去数据库中查询,再存入redis…
测试结果
first
首次查询,redis中并不存在我想要的account
从数据库中查询到了之后,存入redis中
second
由于第一次查询之后已存入redis,所以redis存在我们想要的数据,再次测试
从redis中成功拿到数据…
项目层次图
Tip
若有错误,感谢指正!!!