MyBatis-Plus 多表关联分页

       经常会遇到列表页要关联几个表查询,主表只保存关联表的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条也不影响。

 分类和品牌都读出来了。

以上方式有缺点,要查询子表的字段时,无法使用语句where。

所以我认为最好的方式就是建立数据库视图表,通过查询视图表返回一个VO

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值