使用mybatis-plus-join写出两表join查询代码
假设有两个实体类User和Order,对应数据库中的user和order表,且user表中有id和name字段,order表中有id和userId字段。
首先,需要定义两个Mapper接口UserMapper和OrderMapper,分别用于操作user和order表。
UserMapper.java:
public interface UserMapper extends BaseMapper<User> {
}
OrderMapper.java:
public interface OrderMapper extends BaseMapper<Order> {
}
接下来,使用MyBatis-Plus的Wrapper类来实现两表的join查询。
@Autowired
private UserMapper userMapper;
@Autowired
private OrderMapper orderMapper;
public List<UserOrderDTO> getUserOrderList() {
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.select("id", "name"); // 指定查询的字段
List<User> userList = userMapper.selectList(userWrapper);
QueryWrapper<Order> orderWrapper = new QueryWrapper<>();
orderWrapper.select("id", "userId"); // 指定查询的字段
List<Order> orderList = orderMapper.selectList(orderWrapper);
// 进行join操作
List<UserOrderDTO> userOrderList = new ArrayList<>();
for (User user : userList) {
UserOrderDTO userOrderDTO = new UserOrderDTO();
userOrderDTO.setUser(user);
for (Order order : orderList) {
if (order.getUserId().equals(user.getId())) {
userOrderDTO.getOrderList().add(order);
}
}
userOrderList.add(userOrderDTO);
}
return userOrderList;
}
上述代码中,首先分别使用userMapper和orderMapper查询出user表和order表的数据。然后使用两个循环将两个表的数据进行join操作,将查询结果封装到UserOrderDTO对象中,最后返回结果。
需要注意的是,UserOrderDTO是一个自定义的DTO类,用于封装user和order表的关联数据。
UserOrderDTO.java:
public class UserOrderDTO {
private User user;
private List<Order> orderList = new ArrayList<>();
// 省略getter和setter方法
}
``
原文地址: https://www.cveoy.top/t/topic/hJjC 著作权归作者所有。请勿转载和采集!