参考:mybatis-plus实现多表联查
MyBatis @Select注解介绍:基本用法与动态SQL拼写
SpringBoot系列(二十七)MyBatisPlus联表查询

第一步,定义Bean对象

extends继承LEFT JOIN的主表,然后把需要汇总的数据在Bean里定义出来。后面用来获取数据用

  1. package com.tj.caiwu.domain;
  2. import com.baomidou.mybatisplus.annotation.TableField;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import com.baomidou.mybatisplus.annotation.TableName;
  5. import com.tj.base.domain.BaseBaobeiM;
  6. import lombok.Data;
  7. import java.io.Serializable;
  8. import java.util.Date;
  9. /**
  10. * 财务-按归属和转账人进行汇总
  11. */
  12. @Data
  13. public class CaiwuBaobeiDayMoney extends BaseBaobeiM {
  14. //日期
  15. private Date date;
  16. //付款人
  17. private String payer;
  18. //归属
  19. private String shopbelong;
  20. //合计
  21. private Double total;
  22. //付款金额
  23. private Integer goodPriceSum;
  24. //佣金
  25. private Integer commissionSum;
  26. //人工费
  27. private Integer rengongfeiSum;
  28. }

第二步,在Mapper里定义join和groupby的方法

可以使用@Select注解直接编写sql语句

  1. package com.tj.caiwu.mapper;
  2. import com.baomidou.mybatisplus.core.conditions.Wrapper;
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. import com.baomidou.mybatisplus.core.toolkit.Constants;
  5. import com.tj.caiwu.domain.CaiwuBaobeiDayMoney;
  6. import org.apache.ibatis.annotations.Param;
  7. import org.apache.ibatis.annotations.Select;
  8. import java.util.List;
  9. /**
  10. * @Entity com.tj.caiwu.domain.CaiwuBaobeiDayMoney
  11. */
  12. public interface CaiwuBaibeiDayMoneyMapper extends BaseMapper<CaiwuBaobeiDayMoney> {
  13. @Select("SELECT b.payer," +
  14. "b.shopbelong," +
  15. "SUM(a.good_price) AS goodPriceSum ," +
  16. "SUM(b.commission) AS commissionSum," +
  17. "SUM(b.rengongfei) AS rengongfeiSum " +
  18. "from base_baobei_m AS a LEFT JOIN base_baobei AS b " +
  19. "on a.baobei_id=b.id " +
  20. "${ew.customSqlSegment}")
  21. List<CaiwuBaobeiDayMoney> tjList(@Param(Constants.WRAPPER) Wrapper wrapper);
  22. }

${ew.customSqlSegment}是包含了WHERE ,${ew.sqlSegment}是不包含where的,要注意一下

第三步,调用Mapper里定义的,添加LambdaQueryWrapper条件

  1. @Resource
  2. private CaiwuBaibeiDayMoneyMapper baibeiDayMoneyMapper;
  3. @Test
  4. public void test() {
  5. //设置查询条件,按什么进行分类汇总
  6. LambdaQueryWrapper<CaiwuBaobeiDayMoney> lqw = new LambdaQueryWrapper<>();
  7. lqw.groupBy(CaiwuBaobeiDayMoney::getShopbelong);
  8. List<CaiwuBaobeiDayMoney> allBaseBaobeiInfo = baibeiDayMoneyMapper.tjList(lqw);
  9. log.info("结果:{}", allBaseBaobeiInfo);
  10. }

附:自定义分页查询的方法

参考:mybatis-plus多表联合分页查询最佳实践

  1. @Select("SELECT b.payer," +
  2. "b.shopbelong," +
  3. "SUM(a.good_price*a.number) AS goodPriceSum , " +
  4. "SUM(b.commission*a.number) AS commissionSum, " +
  5. "SUM(b.rengongfei*a.number) AS rengongfeiSum, " +
  6. "SUM(a.number) AS numberSum " +
  7. "from base_baobei_m AS a LEFT JOIN base_baobei AS b " +
  8. "on a.baobei_id=b.id " +
  9. "${ew.customSqlSegment}")
  10. Page<CaiwuBaobeiDayMoney> tjPage(Page<CaiwuBaobeiDayMoney> page, @Param(Constants.WRAPPER) Wrapper wrapper);