假设有两个实体类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方法
}
``
使用mybatis-plus-join写出两表join查询代码

原文地址: https://www.cveoy.top/t/topic/hJjC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录