public Page<Post> postPageAll(SearchTemplate searchTemplate) { Page<Post> postPage = new Page<>(searchTemplate.getPageNum(), searchTemplate.getPageSize()); List<Post> lists = postMapper.selctPost(searchTemplate); postPage.setRecords(lists); for (Post post : postPage.getRecords()) { //先根据帖子编号查出user_id字段用该字段查用户名把用户名加进去 post.setNickName(postMapper.nickName(post.getUserId())); //然后再根据帖子编号查询出标签名字添加进字符串中给标签名属性赋值 List<String> list = postMapper.tagName(post.getId()); if (CheckNullUtils.checkList(list)) { StringBuilder str = new StringBuilder(); for (String tagname : list) { str.append(tagname + ","); } post.setTagName(str.deleteCharAt(str.length() - 1).toString()); } } postPage.setTotal(lists.size()); return postPage; }优化这段代码
时间: 2023-04-05 09:04:45 浏览: 151
首先,可以考虑将查询用户名和标签名的操作改为一次查询,减少数据库查询次数。具体来说,可以使用联合查询或者子查询来实现。
其次,可以考虑使用分页查询来优化查询性能,避免一次查询过多数据导致性能下降。可以使用 LIMIT 和 OFFSET 关键字来实现分页查询。
最后,可以考虑使用缓存来优化查询性能,避免重复查询相同数据导致性能下降。可以使用 Redis 等缓存工具来实现缓存功能。
优化后的代码如下:
public Page<Post> postPageAll(SearchTemplate searchTemplate) {
Page<Post> postPage = new Page<>(searchTemplate.getPageNum(), searchTemplate.getPageSize());
List<Post> lists = postMapper.selctPost(searchTemplate);
postPage.setRecords(lists);
// 一次查询用户名和标签名
Map<Integer, String> nickNameMap = new HashMap<>();
Map<Integer, List<String>> tagNameMap = new HashMap<>();
for (Post post : lists) {
nickNameMap.put(post.getUserId(), postMapper.nickName(post.getUserId()));
List<String> tagNames = postMapper.tagName(post.getId());
if (CheckNullUtils.checkList(tagNames)) {
tagNameMap.put(post.getId(), tagNames);
}
}
// 设置用户名和标签名
for (Post post : postPage.getRecords()) {
post.setNickName(nickNameMap.get(post.getUserId()));
List<String> tagNames = tagNameMap.get(post.getId());
if (CheckNullUtils.checkList(tagNames)) {
post.setTagName(String.join(",", tagNames));
}
}
// 分页查询
int total = postMapper.countPost(searchTemplate);
postPage.setTotal(total);
int offset = (searchTemplate.getPageNum() - 1) * searchTemplate.getPageSize();
int limit = searchTemplate.getPageSize();
List<Post> pageList = postMapper.selectPostPage(searchTemplate, offset, limit);
postPage.setRecords(pageList);
return postPage;
}
阅读全文