一对一或一对多关联查询
1
2
3
4
5
6
7
8
9
10
11
|
@Table(value = "qb_answer_card",comment = "答题卡")
public class AnswerCardEntity extends BaseEntity<AnswerCardEntity> {
private Long examId;
@RelationOneToOne(selfField = "examId",targetField = "id")
private ExamEntity exam;
@RelationOneToMany(selfField = "id",targetField = "answerCardId")
private List<AnswerCardQuestionEntity> answerCardQuestions;
}
|
selfField
: 当前表中用于关联的字段, 不是实际表中的字段(比如, 这里examId在表里实际为 exam_id)
targetField
: 目标表中的字段
通过中间表关联查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@Table(value = "qb_mistake_tag_bind",comment = "错题标签绑定表")
public class MistakeTagBindEntity extends BaseEntity<MistakeTagBindEntity> {
private Long mistakeId;
private Long mistakeTagId;
@RelationOneToOne(selfField = "mistakeTagId",targetField = "id")
private MistakeTagEntity mistakeTag;
}
@Table(value = "qb_mistake",comment = "错题表")
public class MistakeEntity extends BaseEntity<MistakeEntity> {
/**
* 错题本ID
*/
@Index
private Long mistakeBookId;
@RelationOneToMany(
joinTable = "qb_mistake_tag_bind",
selfField = "id",
joinSelfColumn = "mistake_id",
joinTargetColumn = "mistake_tag_id",
targetField = "id"
)
private List<MistakeTagEntity> mistakeTags;
}
|
joinTable
: 中间表
selfField
: 当前表关联字段
joinSelfColumn
: 中间表中和当前表关联的字段
joinTargetColumn
: 中间表中和目标表关联的字段
targetField
: 目标表关联字段
进行关联查询时对子表做条件查询
1
2
3
4
5
6
|
var pr = answerCardMapper.paginateWithRelations(new Page<>(page, size),
qw,fieldQueryBuilder->fieldQueryBuilder.field(AnswerCardEntity::getExam)
.queryWrapper(answerCard->QueryWrapper.create()
.select().from(EXAM_ENTITY)
.where(EXAM_ENTITY.SUBJECT_CODE.eq(param.getSubjectCode())
)));
|
参考: 文档