经常会遇到列表页要关联几个表查询,主表只保存关联表的ID,要显示关联表的ID,则需要查询列表时一起查出来。使用MyBatis-Plus可以使用多种方式联合查询,例如使用mapper
的 xml ,也可以使用 QueryWrapper 提供的方法查询。下面介绍最简单,最便捷的方法,上代码:
QueryWrapper<SpuInfoEntity> wrapper = new QueryWrapper<>();
wrapper.select("id","spu_name","weight","publish_status","create_time","update_time",
"(SELECT b.name FROM pms_brand b WHERE b.brand_id = pms_spu_info.brand_Id) AS
brandName" , "(SELECT c.name FROM pms_category c WHERE c.cat_id =
pms_spu_info.catalog_Id) AS categoryName"); IPage<SpuInfoEntity> page =
this.page( new Query<SpuInfoEntity>().getPage(params), wrapper ); return new
PageUtils(page);
使用 QueryWrapper 的 select()方法定义需要搜索的字段,将ID字段转化为名称字段,这样就可以写一次查询,其他交给MySQL执行。
这种方法比 Left JOIN 方法要多了几毫秒,分页每次读10-20条也不影响。
分类和品牌都读出来了。