spring boot mybatis查询关联表数据,一对一,一对多快速查询

查询主表对应的一对一关联表数据,以及主表对应的关联表一对多数据

以下列场景为例:
标准奖励制度表——标准制度Id 唯一主键
申报一项奖励——关联标准制度Id
申报奖励附件表——关联 申报奖励表Id

需求:查询出某一条申报的奖励的所有资料和附件信息,同时查出标准制度的详细内容

实现:
标准奖励表VO所继承实体类文件
PointsStandard.java(省去get、set 方法)

**
 * 制度表
 */
public class PointsStandard {
    /**
     * 标准Id
     */
    private Integer standardId;

    /**
     * 申报内容
     */
    private String contents;
}

申请奖励主表VO所继承的实体类文件
ApplyRecord.java(省去get、set 方法)

/**
 * 申报记录表
 */
public class ApplyRecord {

    /**
     * 申报Id
     */
    private Integer applyId;

    /**
     * 奖励制度标准Id
     */
    private Integer standardId;

    /**
     * 申报内容
     */
    private String applyContent;
}

申请附件表VO所继承的实体类文件
ApplyRecord.java(省去get、set 方法)

**
 * 申报附件表
 */
public class ApplyFile {

    /**
     * 附件Id
     */
    private Integer fileId;

    /**
     * 申报Id
     */
    private Integer applyId;

    /**
     * 文件名称
     */
    private String fileName;

    /**
     * 数据路径
     */
    private String fileSrc;

}

主表和另外两个表关联关系的VO(省去get、set 方法)
ApplyRecordVO.java

public class ApplyRecordVO extends ApplyRecord {

    /**
     * 标准制度内容
     */
    private PointsStandardVO pointsStandard;

    /**
     * 申报附件
     */
    private List<ApplyFileVO> applyFileList;
}

最关键的来了,实现mapper类:
ApplyRecordMapper .java

/**
 * 申报记录
 */
public interface ApplyRecordMapper {
/**
     * 根据申请人Id(必填)、状态、标准制度Id、申报Id查询
     * @param alpplyUserId
     * @param checkStatus
     * @param standardId
     * @param applyId
     * @return
     */
    @Select("SELECT * FROM `apply_record`  where alpplyUserId = #{alpplyUserId} ")
    @Results({
            @Result(column="standardId",property="standardId"),
            @Result(column="applyId",property="applyId"),
            @Result(property = "pointsStandard", column = "standardId", one = @One(select =
                    "com.genius.points_system.mapper.PointsStandardMapper.getPointsStandardListById")),
            @Result(property = "applyFileList", column = "applyId", many = @Many(select =
                    "com.genius.points_system.mapper.ApplyFileMapper.getApplyFileListByApplyId"))
    })
    List<ApplyRecordVO> getApplyRecordVOByUserAndStatus(@Param("alpplyUserId") String alpplyUserId);
}

对应
com.genius.points_system.mapper.PointsStandardMapper.getPointsStandardListById的Mapper方法

	/**
     * 根据Id查询标准制度
     * @param standardId
     * @return
     */
    @Select("select * from points_standard where standardId = #{standardId}")
    List<PointsStandardVO> getPointsStandardListById(@Param("standardId") Integer standardId);

对应
com.genius.points_system.mapper.ApplyFileMapper.getApplyFileListByApplyId的Mapper方法

	/**
     * 查询附件列表
     * @param applyId
     * @return
     */
    @Select("select * from apply_file where applyId = #{applyId}")
    List<ApplyFileVO> getApplyFileListByApplyId(@Param("applyId") Integer applyId);

注意:
@Result(column=“standardId”,property=“standardId”)
@Result(column=“applyId”,property=“applyId”)
这类关联关系中注解一点要记得写上,不然主表中对应字段standardId、applyId会为null

解释:
一对一查询:
property:查询结果赋值给此实体属性
column:对应数据库的表字段,做为下面@One(select方法的查询参数
one:一对一的查询
@One(select = 从包名到类名到方法全路径) :调用的方法

一对多查询:
property:查询结果赋值给此实体属性
column:对应数据库的表字段,可做为下面@One(select方法)的查询参数
many:一对多的查询
@Many(select = 从包名到类名到方法全路径) :调用的方法

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值