com.github.yulichang Mybatis-Plus Join 简介
在 MyBatis-Plus 中,使用 com.github.yulichang 提供的扩展库(Mybatis-Plus Join),可以非常方便地实现多表联表查询,而不需要手动编写复杂的 SQL。这种扩展库简化了联表操作,提供了一种基于 Lambda 表达式的查询方式。
MyBatis-Plus-Join (opens new window)(简称 MPJ)是一个 MyBatis-Plus (opens new window)的增强工具,在 MyBatis-Plus 的基础上只做增强不做改变,为简化开发、提高效率而生。
该扩展库通过 MyBatis-Plus 的 Wrapper 和 Mapper 扩展支持 JOIN 操作,允许你在查询时使用类似 MyBatis-Plus 的链式查询语法完成多表关联查询。
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
无感引入, 支持MP风格的查询, 您会MP就会MPJ, 无需额外的学习成本
兼容MP的别名、逻辑删除、枚举列、TypeHandle列等特性
支持注解形式一对一、一对多和连表查询形式的一对一和一对多
com.github.yulichang 的 MyBatis-Plus Join 库简化了多表联表查询,让你可以通过 Lambda 表达式和链式操作编写复杂的查询逻辑,提升了代码的可读性和维护性。如果你需要多表关联查询,MyBatis-Plus Join 是一个非常强大的工具。
快速上手
- 添加依赖
在你的 Maven 项目中,添加以下依赖:
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join</artifactId>
<version>1.4.5</version>
</dependency>
- 数据库表结构示例
假设我们有两个表:
● user 表:用户表
● order 表:订单表,关联用户 ID
CREATE TABLE user (
id BIGINT PRIMARY KEY,
name VARCHAR(50),
age INT
);
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT,
order_number VARCHAR(50),
total_amount DECIMAL(10, 2),
FOREIGN KEY (user_id) REFERENCES user(id)
);
- 实体类定义
定义两个实体类:
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
@Data
public class Order {
private Long id;
private Long userId;
private String orderNumber;
private BigDecimal totalAmount;
}
- 使用 Mybatis-Plus Join 进行多表查询
方法一:JoinLambdaQueryWrapper
你可以使用 JoinLambdaQueryWrapper 来构建多表联表查询的条件。例如,我们想要查询每个订单的用户信息,可以这样写:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.github.yulichang.toolkit.MPJQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
public class OrderService {
@Autowired
private OrderMapper orderMapper;
public List<UserOrderDTO> getOrderWithUser() {
MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(Order.class) // 查询 Order 表所有字段
.select(User::getName) // 查询 User 表的 Name 字段
.leftJoin(User.class, User::getId, Order::getUserId); // 使用 left join 连接
return orderMapper.selectJoinList(UserOrderDTO.class, wrapper);
}
}
方法二:自定义 DTO 返回结果
创建 UserOrderDTO 类,用于存放查询结果。
@Data
public class UserOrderDTO {
private Long id;
private String name;
private String orderNumber;
private BigDecimal totalAmount;
}
然后在查询中返回 UserOrderDTO。
public List<UserOrderDTO> getOrderWithUserDTO() {
MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
wrapper.select(Order::getId, Order::getOrderNumber, Order::getTotalAmount)
.select(User::getName)
.leftJoin(User.class, User::getId, Order::getUserId);
return orderMapper.selectJoinList(UserOrderDTO.class, wrapper);
}
- Mapper 接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OrderMapper extends MPJBaseMapper<Order> {
}
通过 MPJBaseMapper 提供的 selectJoinList 方法,可以直接执行多表联表查询,并返回自定义的 DTO 对象。
标签:多表,private,查询,MyBatis,Plus,Mybatis,com,class From: https://blog.csdn.net/Fireworkit/article/details/142920590