1.說明
最近寫代碼用到了mybatisPlus涉及到關聯表查詢。需求是這樣的:
我有一個專業表major其中有個字段是所屬院系dept_id,我需要通過這個dept_id關聯院系表department的ID去獲取院系的名稱。
例如:經濟管理學院。
實現效果:
2.實現步驟
2.1 現有實體類
- 院系實體
```java
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_department")
@ApiModel(value="Department對象", description="院系")
public class Department implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "院系ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "院系代碼")
private String deptNo;
@ApiModelProperty(value = "院系名稱")
private String deptName;
@ApiModelProperty(value = "院系位置")
private String deptLocation;
@ApiModelProperty(value = "備註")
private String deptRemark;
@ApiModelProperty(value = "創建時間")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新時間")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
- 專業實體
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_major")
@ApiModel(value="Major對象", description="專業")
public class Major implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "專業ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "專業代碼")
private String majorNo;
@ApiModelProperty(value = "專業名稱")
private String majorName;
@ApiModelProperty(value = "所屬學院")
private Long deptId;
@ApiModelProperty(value = "備註")
private String majorRemark;
@ApiModelProperty(value = "創建時間")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新時間")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
2.2 創建vo對象
- MajorVO 前端列表展示用
@Data
@ApiModel(value = "MajorVO", description = "展示用專業信息")
public class MajorVO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "專業ID")
private Long id;
@ApiModelProperty(value = "專業代碼")
private String majorNo;
@ApiModelProperty(value = "專業名稱")
private String majorName;
@ApiModelProperty(value = "所屬院系ID")
@TableField("dept_id")
private Long deptId;
@ApiModelProperty(value = "所屬院系")
private String deptName;
@ApiModelProperty(value = "備註")
private String majorRemark;
@ApiModelProperty(value = "創建時間")
private Date createTime;
}
2.3 修改MajorMapper
public interface MajorMapper extends BaseMapper<Major> {
/**
*
* @param page 前端傳入
* @return
*/
@Select("SELECT m.*,d.`dept_name` FROM tb_major m,tb_department d WHERE m.dept_id=d.id")
List<MajorVO> selectMajorList(Page page);
}
2.4 修改MajorService
public interface MajorService extends IService<Major> {
void pageQuery(Page<MajorVO> pageParam);
}
@Service
public class MajorServiceImpl extends ServiceImpl<MajorMapper, Major> implements MajorService {
@Override
public void pageQuery(Page<MajorVO> page) {
List<MajorVO> records = baseMapper.selectMajorList(page);
page.setRecords(records);
page.setTotal(records.size());
}
}
2.5 修改controller
@ApiOperation(value = "專業分頁列表")
@GetMapping("{page}/{limit}")
public Result pageQuery(
@ApiParam(name = "page", value = "當前頁碼", required = true)
@PathVariable Long page,
@ApiParam(name = "limit", value = "每頁記錄數", required = true)
@PathVariable Long limit){
Page<MajorVO> pageParam = new Page<>(page, limit);
majorService.pageQuery(pageParam);
return Result.ok().data("total", pageParam.getTotal()).data("rows", pageParam.getRecords());
}