数据库
一、表设计
如果大家做收藏功能,肯定会遇到存储String数组类型或者int数组类型的情况,这种时候数据库中表字段反而不好对应存储在这里我推荐一下我使用的一种方法,首先我做的是帖子类的收藏功能,所以对应的收藏的帖子id是Interger类型的,我在数据库选择使用varchar,后端选择使用String类型来记录这个数组,设计是
private String myfavorites;
这是pojo类里对应的字段,数据库则是
后端
那么在这种情况下我们可以利用;来进行数据的多条存储,举个例子,一旦我收藏了某个帖子我就往该字段添加帖子id和;例如1;2;3然后我们在后端就可以利用String自带的split方法来分割得到正确的id并且根据id来得到对应的帖子返回数据展示在前端,提供一下我的逻辑处理:
@PostMapping("/user/favority")
public R<List<Post>> GetMyfavorite(@RequestBody String token){
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
token = token.substring(0,token.length()-1);
String[] split = token.split("\\+");
token = split[0]+" "+split[1];
queryWrapper.eq(User::getToken,token);
User res = userService.getOne(queryWrapper);
//数据库使用分号来间隔,后端需要分割分号来得到帖子Id
String myfavorites = res.getMyfavorites();
String[] postIds = myfavorites.split(";");
List<Post> favority = new ArrayList<>();
LambdaQueryWrapper<Post> queryWrapper1 = new LambdaQueryWrapper<>();
for (String postId : postIds) {
Integer newid = Integer.valueOf(postId);
//得到对应的帖子并且存入favority数组中
queryWrapper1.eq(Post::getId,newid);
Post mylove = postService.getOne(queryWrapper1);
queryWrapper1.clear();
favority.add(mylove);
}
return R.success(favority);
}
这里简单解释一下,首先是根据jwt令牌得到当前是哪个用户,由于前端传参问题的存在,需要对传过来的token进行处理,然后得到了对应的User以后,在得到数据库中的字段内容,然后就是利用迭代器得到所有的帖子信息存储到List中最终返回给前端。
希望帖子对大家有帮助