mybatis雙表查詢? Mybatis-Plus缺省是不帶多表關聯功能,多表關聯需要作用mapper.xml寫SQL語句,或都在domain的mapper對象下使用@Select注解寫SQL語句,用後種方法根據自己的需要,花了一天時間學習研究,做了自己的第一個帶查詢條件的多表關聯SQL,特此記錄:,我來為大家科普一下關于mybatis雙表查詢?以下内容希望對你有幫助!
Mybatis-Plus缺省是不帶多表關聯功能,多表關聯需要作用mapper.xml寫SQL語句,或都在domain的mapper對象下使用@Select注解寫SQL語句,用後種方法根據自己的需要,花了一天時間學習研究,做了自己的第一個帶查詢條件的多表關聯SQL,特此記錄:
一、功能說明當前有兩個表,第一表是景區基本信息,第二個表是景區的文檔記錄表,第二個表隻記錄了景區ID代碼,查管理第二個表時,需要使用第一個表的信息如景區名稱,景區所在行政區劃的編碼,并要根據表一的景區名稱,區劃編碼,表二的文件代碼、文件主題,景區編碼進行查詢。
二、實現方法1、編寫VO對象
增加了個VO對象,擴展表二對象,同時需要将使用表一的字段添加上,形成一個完整的View對象,且續參數傳遞,查詢操作對使用這個VO對象。
@Data
public class MapScenicFileVO extends MapScenicFile {
private String scenicName;
private String scenicAdcode;
}
2、mapper對象擴展函數
添加表聯合功能,使用@select注解方式添加,這個表是采用join進行聯合,以便後面傳遞wrapper查詢條件組合。使用where子句聯合,後面傳遞參數時又會産生where子句,導緻查詢錯誤。
注意${ew.customSqlSegment}是傳遞自定義條件到SQL工廠。
/**
* 景區文件聯合景區名稱查詢
*
* @param wrapper 翻頁對象,可以作為 xml 參數直接使用,傳遞參數 Page 即自動分頁
* @return 列表
*/
@Select("SELECT map_scenic_file.*,map_scenic.`name` as `scenic_name`,map_scenic.`adcode` as `scenic_adcode` FROM map_scenic_file left join map_scenic on map_scenic_file.scenic_id=map_scenic.id ${ew.customSqlSegment}")
List<MapScenicFileVO> selectScenicFile(@Param(Constants.WRAPPER) Wrapper wrapper);
3、構建執行方法
在服務層執行函數中,根據需要構建組合查詢的QuerWrapper,注意Long和String空判斷方式不一樣。
public List<MapScenicFileVO> selectScenicFileList(MapScenicFileVO scenicFile) {
QueryWrapper<MapScenicFileVO> scenicFileQueryWrapper = new QueryWrapper<>();
//構造查詢條,按文件ID,景區ID,景區名稱,文件主題構建查詢條件
if (scenicFile.getId() !=null ) {
scenicFileQueryWrapper.eq("map_scenic_file.id",scenicFile.getId());
}
if (scenicFile.getScenicId() !=null ) {
scenicFileQueryWrapper.eq("map_scenic_file.scenic_id",scenicFile.getScenicId());
}
if (StringUtils.isNotEmpty(scenicFile.getScenicName())) {
scenicFileQueryWrapper.like("map_scenic.name",scenicFile.getScenicName());
}
if (StringUtils.isNotEmpty(scenicFile.getsubject())) {
scenicFileQueryWrapper.like("map_scenic_file.subject",scenicFile.getSubject());
}
return baseMapper.selectScenicFile(scenicFileQueryWrapper);
}
4、對應的Service接口,Controller統一改為使用VO對象即可,分頁方法我是采用pagahelper,下次再研究改為mybatis-plus的分而方法
三、前端前端調用沒什麼區别一樣,注意一下VO對象的名稱,兩個表聯合有些名稱已用AS改過了,
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!