整合分为两步:1、整合MyBatis;2、整合Redis。
(数据库用MySql,自行百度安装。)
一、整合MyBatis。
1、创建SpringBoot项目。
2、在resources下的application.properties配置里添加如下代码:
server.port=8090
## 数据库设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db_bgy?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root123
## mybatis配置
# 参数类型的包别名设置
mybatis.typeAliasesPackage=com.example.entity
# 指向映射xml文件目录
mybatis.mapperLocations=classpath:mapper/*.xml
3、创建相应的项目目录以及文件,如下图所示:
以上各个文件的代码如下:
(1)UserController代码如下:
@RestController
@RequestMapping("/user")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping(value = "/find_user", method = RequestMethod.POST)
public Map<String, Object> GetUser(@RequestParam(value = "id", defaultValue = "0") int id){
User user = userService.findUserById(id);
if (user != null) {
return HttpUtils.getResponse(1, user, "请求成功");
}
return HttpUtils.getResponse(0, null, "请求失败");
}
}
附加:如何传入Json对象参数?
1.请求参数格式必须是正确的JSON。
2.在入参中使用注解@RequestBody,用于接收JSON参数,使其自动转对象
3.标识请求参数的格式为JSON—>> @PostMapping(value=”/Test”,produces = “application/json;charset=UTF-8”)
(2)HttpUtils代码如下:
public class HttpUtils {
public static final int REQUEST_SUCCESS = 1;
public static final int REQUEST_FAILED = 0;
/**
* Http请求接口结果封装方法
*
* @param result 请求结果
* @param object 数据对象
* @param msg 提示信息
* @return
*/
public static Map<String, Object> getResponse(int result, Object object, String msg) {
Map<String, Object> data = new HashMap<>();
data.put("result", result);
data.put("msg", msg);
data.put("data", object);
return data;
}
}
(3)User类的代码如下:
public class User {
private Integer id;
private String userName;
private String passWord;
private String realName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
}
(4)UserMapper.java的代码如下:
@Repository
public interface UserMapper {
User findUserById(int id);
}
(5)UserService.java的代码如下:
@Service
public class UserService {
final
UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User findUserById(int id){
return userMapper.findUserById(id);
}
}
(6)UserMapper.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.example.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.entity.User">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="userName" jdbcType="VARCHAR" property="userName" />
<result column="passWord" jdbcType="VARCHAR" property="passWord" />
<result column="realName" jdbcType="VARCHAR" property="realName" />
</resultMap>
<select id="findUserById" resultType="com.example.entity.User">
select * from user where id = #{id}
</select>
</mapper>
4、在启动文件DemoApplication.java中添加@MapperScan注解。
5、运行项目,然后调试接口结果如下图:
二、整合Redis。
1、安装部署Redis。
下载网址:
https://github.com/tporadowski/redis/releases
(1)下载zip文件,并解压到你想要的目录下即可。
(2)cmd命令,cd到解压目录下,执行运行命令:redis-server.exe。
(3)推荐安装一下redis管理工具:Redis Desktop Manager。(下载地址:自行百度)
2、SpringBoot整合Redis缓存数据库。
(1)pom.xml添加redis依赖。
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)添加config文件夹,并创建RedisConfig.java文件,文件代码如下:
@Configuration
@EnableCaching
//Redis 缓存配置类
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//初始化json的序列化方式
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);
//设置 value 的序列化方式为 jackson2JsonRedisSerializer
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
//设置默认超过期时间是100秒
defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ofSeconds(100));
//初始化RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
//初始化RedisCacheManager
RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
//设置白名单---非常重要********
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(om);
return cacheManager;
}
}
(3)在配置文件application.properties中添加Redis相关配置代码:
#Redis数据库索引(默认为0)
spring.redis.database=0
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=10
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=0
(4)在启动文件DemoApplication.java中添加@EnableCaching注解。
(5)在UserService.java中添加Redis缓存注解,代码如下:
(6)请求接口:
http://localhost:8090/user/find_user
,结果如下:(可看到Redis里已有相关缓存)
(7)缓存已有,但是还没有结束。如果,这时通过修改用户名接口修改了该用户的UserName,然后请求接口获取该用户信息,那么获取到的还是没修改之前的缓存数据(缓存到期之前)。为了保证数据的实时性,就要用到其他缓存注解。
Redis常用的缓存注解:
-
@Cacheable
– 表明对应方法的返回结果可以被缓存,首次调用后,下次就从缓存中读取结果,方法不会再被执行了。 -
@CachePut
– 更新缓存,方法每次都会执行。 -
@CacheEvict
– 清除缓存,方法每次都会执行。
通过给增加、删除、修改类型接口添加@CacheEvict注解,来达到数据实时性的目的。添加代码如下:
PS附加内容:
项目结构也可以如下所示:
(1)UserService.java代码如下:
public interface UserService {
User findUserById(int id);
void updateUserName(int id, String userName);
}
(2)UserServiceImpl.java代码如下:
@Service("UserService")
@CacheConfig(cacheNames="user")
public class UserServiceImpl implements UserService {
final
UserMapper userMapper;
public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Cacheable(key="'user_cache_'+ #p0")
public User findUserById(int id){
return userMapper.findUserById(id);
}
@CacheEvict(key="'user_cache_'+ #p0")
public void updateUserName(int id, String userName) {
userMapper.updateUserName(id, userName);
}
}
其他内容不用修改。