【当前情况】
实体类:InteractionQuestion
实现类Impl:InteractionQuestionServiceImpl questionService
需要去除的属性字段:private String description
【代码实现——单属性】
在 lambda 中的 select 处,使用 TableFieldInfo 的匿名内部类方法,进行指定属性字段的过滤查询
- Page
questionPage = questionService.lambdaQuery() - /*
- 由于显示的内容中,问题的描述在展示页不进行展示,所以查询的时候将描述属性给去除,节省空间
- */
- .select(InteractionQuestion.class, new Predicate
() { - @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
excludedFields = new HashSet<>(Arrays.asList("description", "field2", "field3")); -
- Page
questionPage = questionService.lambdaQuery() - .select(InteractionQuestion.class, new Predicate
() { - @Override
- public boolean test(TableFieldInfo tableFieldInfo) {
- // 检查字段名是否在不需要查询的字段集合中
- return !excludedFields.contains(tableFieldInfo.getProperty());
- }
- })
- // 其他查询条件和操作...
- .page(pageNum, pageSize)
- .list();