查询主表对应的一对一关联表数据,以及主表对应的关联表一对多数据
以下列场景为例:
标准奖励制度表——标准制度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 = 从包名到类名到方法全路径) :调用的方法