mybatis-plus-join使用教程
时间: 2025-02-11 16:10:24 浏览: 109
### MyBatis Plus Join 使用教程
#### 创建实体类和Mapper接口
为了实现Join查询,首先需要创建两个实体类以及它们各自的Mapper接口。假设存在`User`和`Order`两张表。
```java
// 用户实体类
@Entity
public class User {
@TableId
private Long id;
private String name;
private Integer age;
// getter 和 setter 方法省略
}
// 订单实体类
@Entity
public class Order {
@TableId
private Long orderId;
private Long userId; // 关联字段
private Double amount;
// getter 和 setter 方法省略
}
```
对于Mapper接口,则继承BaseMapper并指定泛型参数为相应的实体类:
```java
// 用户映射器接口
public interface UserMapper extends BaseMapper<User> {}
// 订单映射器接口
public interface OrderMapper extends BaseMapper<Order> {}
```
#### 执行Join查询
MyBatis Plus提供了多种方式来进行关联查询,其中一种简单的方法就是通过编写XML文件中的SQL语句来完成复杂的JOIN操作[^3]。
下面是一个基于XML配置的INNER JOIN例子,在`order_mapper.xml`中定义如下SQL片段用于获取订单及其所属用户的姓名与年龄信息:
```xml
<select id="selectOrdersWithUserInfo" resultType="map">
SELECT o.order_id, u.name AS user_name, u.age FROM t_order o INNER JOIN t_user u ON o.user_id = u.id WHERE 1=1
</select>
```
此部分代码实现了从`t_order`表和`t_user`表之间建立内部链接关系,并选取特定列作为返回结果集的一部分[^2]。
另外还可以利用Wrapper条件构造器配合lambda表达式的方式动态拼接join子句,这种方式更加灵活方便,适用于更复杂的业务场景下构建查询条件。
例如可以在Service层调用时传递入额外筛选项从而影响最终形成的SQL:
```java
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("o.status", "paid").and(i -> i.ge("u.age", 18));
List<Map<String, Object>> list = orderMapper.selectMaps(queryWrapper);
```
上述代码展示了如何设置等值匹配(`eq`)及范围限定(`ge`,大于等于),并且这些约束会被自动附加到生成的基础SELECT...FROM...JOIN...WHERE语句之上。
阅读全文
相关推荐


















