mybatisplus多表查询
时间: 2023-09-02 22:12:14 浏览: 99
支持连表查询的mybatis-plus
5星 · 资源好评率100%
Myatis-Plus是一个基于MyBatis的增强工具,它提供了许多方便的功能,包括多表查询。下面是一个简单的示例,演示如何使用MyBatis-Plus进行多表查询。
假设有两个表:`user`和`order`,它们之间是一对多的关系。每个用户可以有多个订单。现在我们想要查询用户以及他们的订单信息。这可以通过以下几个步骤实现。
1. 创建实体类
首先,我们需要创建`User`和`Order`两个实体类,分别对应数据库中的`user`和`order`表。
```java
public class User {
private Long id;
private String name;
private List<Order> orders;
// 省略getter和setter
}
public class Order {
private Long id;
private Long userId;
private String orderNo;
// 省略getter和setter
}
```
注意,`User`实体类中包含一个`List<Order>`类型的属性,用于存储该用户的所有订单信息。
2. 创建Mapper接口
接下来,我们需要创建Mapper接口,用于定义多表查询的方法。
```java
public interface UserMapper extends BaseMapper<User> {
List<User> selectUserAndOrders();
}
```
在这里,我们使用`@Select`注解定义了一个名为`selectUserAndOrders`的方法,该方法返回一个`List<User>`类型的结果集。
3. 编写SQL语句
我们需要编写SQL语句来实现多表查询。在这里,我们使用`LEFT JOIN`关键字连接`user`和`order`表,并将查询结果按照用户ID进行分组。
```xml
<select id="selectUserAndOrders" resultType="com.example.User">
SELECT u.*, o.id AS order_id, o.order_no
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id
GROUP BY u.id
</select>
```
在这里,`resultType`属性指定了查询结果的类型,即`User`实体类。我们还将订单的ID和订单号作为额外的字段进行查询,并将它们分别映射到`Order`实体类中的`id`和`orderNo`属性中。
4. 调用Mapper方法
最后,我们可以通过调用Mapper接口中定义的方法来执行多表查询。
```java
List<User> userList = userMapper.selectUserAndOrders();
```
在这里,`userMapper`是一个MyBatis的Mapper接口。通过调用`selectUserAndOrders`方法,我们可以获取到一个包含所有用户信息以及他们的订单信息的列表。
阅读全文