当前位置:   article > 正文

MyBatis-Plus多表关联查询_mybatisplus关联查询

mybatisplus关联查询

MyBatis-Plus进行多表关联查询:使用MyBatis-Plus的SQL构建器 ( MPJLambdaWrapper )

还可以使用MyBatis-Plus的SQL构建器进行多表关联查询,例如:

下面详细举一个,联表查询产品和厂商的例子:

(1)引入相关依赖项

  1. <!-- 引入mybatis-plus联表查询相关依赖项 -->
  2. <!-- MVNW pom格式 -->
  3. <dependency>
  4. <groupId>com.github.yulichang</groupId>
  5. <artifactId>mybatis-plus-join</artifactId>
  6. <version>1.2.4</version>
  7. </dependency>
  8. <!-- Gradle 格式 -->
  9. implementation 'com.github.yulichang:mybatis-plus-join:1.2.4'

(2)相关实体类

  1. /**
  2. * 产品实体
  3. */
  4. @Data
  5. @TableName(value = "t_product")
  6. public class Product implements Serializable {
  7. private static final long serialVersionUID = 1L;
  8. /** 本表id */
  9. @TableId(value = "id",type = IdType.AUTO)
  10. private Integer id;
  11. /** 产品编码code */
  12. private String code;
  13. /** 产品名称 */
  14. private String name;
  15. /** 厂商编码code */
  16. private String factoryCode;
  17. }
  18. /**
  19. * 厂商实体
  20. */
  21. @Data
  22. @TableName(value = "t_factory")
  23. public class Factory implements Serializable{
  24. private static final long serialVersionUID = 1L;
  25. /** 本表id */
  26. @TableId(value = "id",type = IdType.AUTO)
  27. private Integer id;
  28. /** 厂商编码code */
  29. private String code;
  30. /** 厂商名称 */
  31. private String name;
  32. }
  1. /**
  2. * 联表查询结果类
  3. */
  4. @Data
  5. public class ProductVO implements Serializable {
  6. /** 产品编码code */
  7. private String code;
  8. /** 产品名称 */
  9. private String name;
  10. /** 厂商编码code */
  11. private String factoryCode;
  12. /** 厂商名称 */
  13. private String factoryName;
  14. }

(3)以产品为为主的Mapper层

特别注意集成 MPJBaseMapper,泛型为 Product 实体

  1. /**
  2. * @Description: Mapper层
  3. * @Author: mc 2023/6/18 11:10
  4. */
  5. @Repository
  6. public interface ProductMapper extends MPJBaseMapper<Product> {
  7. }

(4)业务逻辑实现层进行相关查询及逻辑处理

不做更多查询条件约束,数据库内产品表共10条数据,测试普通查询以及联表查询

注意联表查询时,selectJoinList()方法第一个参数为查询结果集映射的实体类,本处为ProductVO.class

  1. /**
  2. * @Description: 产品相关业务逻辑实现层
  3. * @Author: mc 2023/6/18 11:14
  4. */
  5. @Slf4j
  6. @Service
  7. public class ProductService {
  8. @Autowired
  9. private ProductMapper productMapper;
  10. public List<ProductVO> getProductInfo() {
  11. // 测试单表查询
  12. List<Product> one = productMapper.selectList(null);
  13. log.debug("单表查询,查询返回结果为:{}", one);
  14. // 测试联表查询
  15. List<ProductVO> two = productMapper.selectJoinList(ProductVO.class,
  16. new MPJLambdaWrapper<Product>()
  17. .select(Product::getCode, Product::getName)
  18. .selectAs(Factory::getCode, ProductVO::getFactoryCode)
  19. .selectAs(Factory::getName, ProductVO::getFactoryName)
  20. .leftJoin(Factory.class, Factory::getCode, Product::getFactoryCode)
  21. );
  22. log.debug("联表查询,查询返回结果为:{}", two);
  23. return null;
  24. }
  25. }
  1. // 其他方面
  2. selectAll() // 可以查全部参数;
  3. select() // 查询字段,一个括号内仅能查一个实体,如需要查询多个表的字段,将有多个select();
  4. selectAs() // 相当于取别名,为了数据表内字段名称和结果集实体名称一致;
  5. leftJoin() //联结多个表,将有多个leftJoin(),方法3个参数:联入表实体,联入表关系字段,原表关系字段;

(5)查询结果

单表查询:

联表查询 :

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/624993
推荐阅读
相关标签
  

闽ICP备14008679号