把一个表的查询结果当做另一个表的一个字段输出
CourseController.java
//Controller
@GetMapping("/getPage/{number}/{size}")
@ApiOperation(value = "分页查询课程表(含已更新章节字段)", tags = {"2020-09-09"})
@ApiOperationSupport(
order = 7,
ignoreParameters = {"createTime", "updateTime"}
)
@ResponseBody
public Result<TabCourseVo> getPage(@PathVariable final int number, @PathVariable final int size, final TabCourse condition) {
return new Result<TabCourseVo>().execute(result -> result.setSuccess(service.getPage(
Optional.ofNullable(condition).orElseGet(TabCourse::new),
Pager.builder().number(number).size(size).build()
)));
}
如果number和size不加@PathVariable的话,会出现
500:请求失败,不明确的异常:Optional int parameter ‘number’ is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type
这个错误
如果想传递当前登录的user信息的话需要加上@ApiIgnore @AuthenticationPrincipal注解
CourseService.java
//Service
public QueryResults<TabCourseVo> getPage(final TabCourse condition, final Pager pager) {
QTabCourseChapter tabCourseChapter = QTabCourseChapter.tabCourseChapter;
return repository.getPage(condition,Pager.rebuild(pager), TabCourseVo.class,TabCourse.allColumnAppends(
tabCourseChapter.id.count().as("update_chapters")
));
}
CourseRepository.java
//Repository
default <T> QueryResults<T> getPage(final TabCourse condition, final Pager pager, final Class<T> clazz,final Expression<?>... exps) {
QTabCourseChapter tabCourseChapter = QTabCourseChapter.tabCourseChapter;
return jpaQueryFactory.<JPAQueryFactory>get()
.select(Projections.bean(clazz, exps))
.from(q)
.leftJoin(tabCourseChapter)
.on(q.id.eq(tabCourseChapter.courseId))
.where(condition.where().toArray())
.groupBy(q.id)
.offset(pager.offset())
.limit(pager.limit())
.fetchResults();
}
TabCourseVo.java
//返回值的实体,继承TabCourse并添加update_chapters字段
package com.st.kxy.business.course;
import com.st.kxy.business.course.entity.TabCourse;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@EqualsAndHashCode(callSuper = true)
@ToString
@Data
public class TabCourseVo extends TabCourse {
private Long update_chapters;
}