mybatisplus实现一对多查询
时间: 2023-10-07 17:10:59 浏览: 112
平直边界上的节点-mybatisplus 多租户架构(multi-tenancy)实现详解
在 MyBatis Plus 中,实现一对多查询可以使用注解 `@TableField` 和 `@TableId` 进行配置。以下是一个示例代码:
首先,假设有两个实体类 `User` 和 `Order`,它们之间是一对多的关系,一个用户可以有多个订单。
User.java:
```java
public class User {
@TableId
private Long id;
private String name;
// 一对多关系,一个用户可以有多个订单
@TableField(exist = false)
private List<Order> orders;
// 省略 getter 和 setter 方法
}
```
Order.java:
```java
public class Order {
@TableId
private Long id;
private String orderNo;
private Long userId; // 订单所属的用户ID
// 省略 getter 和 setter 方法
}
```
接下来,在 Mapper 接口中添加方法 `selectUserWithOrders`,该方法使用 MyBatis Plus 的注解 `@Select` 和 `@Results` 来进行一对多查询的配置:
UserMapper.java:
```java
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "orders", column = "id",
many = @Many(select = "com.example.mapper.OrderMapper.selectOrdersByUserId"))
})
User selectUserWithOrders(Long id);
}
```
在上述代码中,`@Result` 注解用于配置属性和列的映射关系,`many` 属性用于指定一对多关系的查询方法。
最后,在 OrderMapper 接口中添加方法 `selectOrdersByUserId`,用于查询指定用户ID下的所有订单:
OrderMapper.java:
```java
public interface OrderMapper extends BaseMapper<Order> {
@Select("SELECT * FROM order WHERE user_id = #{userId}")
List<Order> selectOrdersByUserId(Long userId);
}
```
这样,通过调用 `selectUserWithOrders` 方法即可实现一对多查询,会返回指定用户ID下的用户信息以及对应的订单列表。
阅读全文