1. 程式人生 > 其它 >多表聯查,告別left join

多表聯查,告別left join

表1:資料表,欄位主要有:id,name,file_location_id(bigint),theme_name_id(bigint), labels(String型別,實際是ids,有',')

表2:目錄表,欄位主要有:id,file_location(String)

表3:主題表,欄位主要有:id,theme_name(String)

表4:標籤表,欄位主要有:id,label(String)

VO層

@Data
public class BasicVO{

private Long id;

private String name;

private String fileLocation;

private String themeName;

private String label;
}

serviceImpl層

@Service
public class BasicServiceImpl implements BasicService{
@Autowired
private BasicMapper basicMapper;

@Autowired
private LabelMapper labelMapper;

@Autowired
private FileMapper fileMapper;

@Autowired
private ThemeMapper themeMapper;

/**
* 分頁查詢
*/
@Override
public Page<Basic> selectList(Integer page, Integer limit) {
Page pageData = new Page<>(page,limit);
IPage<Basic> basicIPage = basicMapper.selectPage(pageData, null);
List<Basic> records = basicIPage.getRecords();

List<BasicVO> basicVOList = new ArrayList<>();
for (Basic basic : records) {
BasicVO basicVO = new BasicVO();
BeanUtils.copyProperties(basic,basicVO);

//查詢目錄的條件構造器,'id'為目錄表的id,basic.getFileLocationId()為資料表的關聯id
QueryWrapper queryWrapper =new QueryWrapper();
queryWrapper.eq("id",basic.getFileLocationId());
basicVO.setFileLocation(fileMapper.selectOne(queryWrapper).getFileLocation());

//查詢主題名稱的條件構造器,'id'為主題表的id,basic.getThemeNameId()為資料表的關聯id
QueryWrapper queryWrapper1 =new QueryWrapper();
queryWrapper1.eq("id",basic.getThemeNameId());
basicVO.setThemeName(themeMapper.selectOne(queryWrapper1).getName());

// 獲取標籤的ids
String labels = basic.getLabels();
String[] split = labels.split(",");
// 將String型別的陣列 轉換成Long 型別的List
Long[] longs =(Long[]) ConvertUtils.convert(split ,Long.class);
List<Long> idsLong = Arrays.asList(longs);

List<Label> labels = labelMapper.selectBatchIds(idsLong);
String str ="";
for (Label label : labels) {
String sName = label.getName();
str += ","+sName;
}
basicVO.setLabel(str.substring(1));

basicVOList.add(basicVO);
}
pageData.setRecords(basicVOList);
return pageData;
}
}

省略其他層

根據不同需求和不同前端框架處理結果就可以了