1、查询一般都是根据主键的id进行查询,根据前端的要求,探讨前端需要在页面上面展现的数据,就是我们查询后需要返回的数据,放在vo里面进行统一的封装,参数就是我们的主键id
// 查询账户信息 1:
@ApiOperation(value = "获得用户账户信息",notes = "获得用户账户信息",httpMethod = "POST")
@PostMapping("/getAccountInfo")
public GraceJSONResult getAccountInfo(@RequestParam String userId);
2、编写我们的controller, 首先对我们的参数进行校验,不能为空,接下来便是调用我们的业务层,查询数据库的信息,编写一个VO 类封装前端需要的参数信息,new 一个vo对象把数据库查到对象,通过BeanUtils.copyProperties(user,accountInfoVO); 拷贝到我们的VO里面
controller代码
@Override
public GraceJSONResult getAccountInfo(String userId) {
// 0. 参数校验,判断参数不能为空
if (StringUtils.isBlank(userId)){
return GraceJSONResult.errorCustom(ResponseStatusEnum.UN_LOGIN);
}
// 1. 根据userid查询数据库用户信息: 转去编写service和mapper
AppUser user = userService.getUser(userId);
// 2. 返回用户信息
// " 此处需要前端沟通,前端需要哪些信息,我们就返回哪些信息,不能全部返回,用vo包装需要返回的信息 "
// " BO 就是从我们的视图层,也就是前端页面里面传过来的参数封装 "
// " VO 是我们后端返回给前端渲染的 "
UserAccountInfoVO accountInfoVO = new UserAccountInfoVO();
BeanUtils.copyProperties(user,accountInfoVO);
return GraceJSONResult.ok(accountInfoVO);
}
由于用户的信息,在我们的网站里面,是经常访问到的信息,是一个高并发的数据,当网站的用户数量庞大的时候,频繁的获取用户的信息,对我们的数据库,存在很大的压力,所以我们会把用户的一个基本信息放到我们的redis里面进行缓存,查询用户信息的时候,首先查询我们的redis,redis查不到了再查询我们的数据库,在保存到redis里面
private AppUser getUser(String userId){
// redis 缓存用户信息 4:
// 1. 首先查询判断redis里面 是否包含用户信息,如果包含,查询redis直接返回,就不去查数据库了
String userJson = redis.get(REDIS_USER_INFO + ":" + userId);
AppUser user = null; // 一开始是空的,在里面去进行赋值
if (StringUtils.isNotBlank(userJson)){
user = JsonUtils.jsonToPojo(userJson,AppUser.class);
} else {
// 2. redis 里面没有,就查询数据库,并存到redis里面
// TODO
user = userService.getUser(userId);
// 由于用户的信息不怎么会变动,对于一些千万级别的网站来说,这类信息不会去直接查询数据库
// 那么完全可以依靠redis, 直接把第一次查询后的数据存入到redis中
// redis 缓存用户信息 1:
redis.set(REDIS_USER_INFO + ":" + userId, JsonUtils.objectToJson(user));
}
return user;
}
3、service 代码
@Override
public AppUser getUser(String userId) {
return appUserMapper.selectByPrimaryKey(userId);
}
4. mapper的代码,直接生成
@Repository
// 添加该注解,不然service层注入的时候爆红
public interface AppUserMapper extends MyMapper<AppUser> {
}