【笔记】:当SQL需要查询的字段过多,且存在个别字段不需要作展示,即去除指定查询字段,节省响应时间
【当前情况】
实体类:InteractionQuestion
实现类Impl:InteractionQuestionServiceImpl questionService
需要去除的属性字段:private String description
【代码实现——单属性】
在 lambda 中的 select 处,使用 TableFieldInfo 的匿名内部类方法,进行指定属性字段的过滤查询
Page<InteractionQuestion> questionPage = questionService.lambdaQuery()
/*
由于显示的内容中,问题的描述在展示页不进行展示,所以查询的时候将描述属性给去除,节省空间
*/
.select(InteractionQuestion.class, new Predicate<TableFieldInfo>() {
@Override
public boolean test(TableFieldInfo tableFieldInfo) {
return !tableFieldInfo.getProperty().equals("description"); //指定不需要查询的字段
}
})
.eq(pageQuery.getOnlyMine(), InteractionQuestion::getUserId, userId) //判断是否查询我的问题
.eq(InteractionQuestion::getCourseId, pageQuery.getCourseId())
.eq(pageQuery.getSectionId() != null, InteractionQuestion::getSectionId, pageQuery.getSectionId())
.eq(InteractionQuestion::getHidden, false) //当前问题没有被隐藏
.page(pageQuery.toMpPage("create_time", false));//根据创建时间降序排列
查询结果:
以上方法适用于单个字段,当有多个字段需要去除时,则需要创建一个集合,将需要去除的属性放入其中
【代码实现——多属性】
这里,在 return 返回处,使用集合中的 contains 方法,进行属性匹配,挨个去除查询
/ 创建一个集合来存储不需要查询的字段名
Set<String> excludedFields = new HashSet<>(Arrays.asList("description", "field2", "field3"));
Page<InteractionQuestion> questionPage = questionService.lambdaQuery()
.select(InteractionQuestion.class, new Predicate<TableFieldInfo>() {
@Override
public boolean test(TableFieldInfo tableFieldInfo) {
// 检查字段名是否在不需要查询的字段集合中
return !excludedFields.contains(tableFieldInfo.getProperty());
}
})
// 其他查询条件和操作...
.page(pageNum, pageSize)
.list();
原文地址:https://blog.csdn.net/qq_66862911/article/details/136413679
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!