Mybatis Flex 记录

一对一或一对多关联查询

 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())
                                )));

参考: 文档

记录平时瞎折腾遇到的各种问题, 方便查找
使用 Hugo 构建
主题 Stack 3.29.0Jimmy 设计