mybatisplus多表联查
时间: 2023-09-01 17:12:53 浏览: 107
MyBatis Plus 支持多表联查的方式有很多,以下是几种常见的方式:
1. 使用 MyBatis Plus 提供的 @TableName 注解和 @TableField 注解来实现实体类的属性和数据库表字段的映射,然后使用 MyBatis Plus 提供的 Wrapper 类进行多表联查。
例如:
```java
@Data
public class User {
@TableId
private Long id;
private String name;
}
@Data
public class Order {
@TableId
private Long id;
private Long userId;
private String orderNo;
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private OrderMapper orderMapper;
@Override
public List<UserOrderDTO> getUserOrderList() {
List<UserOrderDTO> userOrderList = new ArrayList<>();
List<User> userList = this.list();
for (User user : userList) {
QueryWrapper<Order> orderWrapper = new QueryWrapper<>();
orderWrapper.eq("user_id", user.getId());
List<Order> orderList = orderMapper.selectList(orderWrapper);
UserOrderDTO userOrder = new UserOrderDTO();
userOrder.setUser(user);
userOrder.setOrderList(orderList);
userOrderList.add(userOrder);
}
return userOrderList;
}
}
public class UserOrderDTO {
private User user;
private List<Order> orderList;
}
```
2. 使用 MyBatis Plus 提供的 @Select 注解和 SQL 语句进行多表联查。
例如:
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user u LEFT JOIN order o ON u.id = o.user_id")
List<UserOrderDTO> getUserOrderList();
}
```
3. 使用 MyBatis Plus 提供的 XML 映射文件进行多表联查。
例如:
```xml
<mapper>
<select id="getUserOrderList" resultMap="userOrderResultMap">
SELECT * FROM user u LEFT JOIN order o ON u.id = o.user_id
</select>
<resultMap id="userOrderResultMap" type="UserOrderDTO">
<result column="id" property="user.id"/>
<result column="name" property="user.name"/>
<collection property="orderList" ofType="Order">
<result column="order_id" property="id"/>
<result column="order_no" property="orderNo"/>
</collection>
</resultMap>
</mapper>
```
无论使用哪种方式,都需要注意 SQL 语句是否正确,以及实体类和数据库表字段的映射是否正确。
阅读全文