在MyBatis中,可以通过使用嵌套查询来返回嵌套列表数据。假设有两个表,一个是用户表,另一个是订单表,每个用户可以拥有多个订单。以下是一个示例:
-
创建用户表和订单表,示例如下:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`)) CREATE TABLE `order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `order_no` varchar(255) NOT NULL, PRIMARY KEY (`id`))
创建User和Order的Java实体类,示例如下:
public class User { private int id; private String name; private List
orders; // getter和setter省略}public class Order { private int id; private int userId; private String orderNo; // getter和setter省略} 创建UserMapper接口,定义查询操作,示例如下:
public interface UserMapper { List
getUsersWithOrders();} 创建UserMapper.xml文件,实现查询操作,示例如下:
SELECT u.id, u.name, o.id, o.user_id, o.order_no FROM user u LEFT JOIN order o ON u.id = o.user_id ORDER BY u.id, o.id 在上述代码中,定义了两个resultMap,一个用于映射User对象,另一个用于映射Order对象。在User对象的resultMap中,使用
标签指定关联属性orders的类型和resultMap。 在查询语句中,使用LEFT JOIN来连接用户表和订单表,并按照用户ID和订单ID排序,从而保证返回的数据按照用户进行分组,每个用户下面包含其对应的订单列表。调用查询操作,示例如下:
List
userList = userMapper.getUsersWithOrders();for (User user : userList) { System.out.println("User: " + user.getName()); List orderList = user.getOrders(); for (Order order : orderList) { System.out.println(" Order: " + order.getOrderNo()); }}
来源地址:https://blog.csdn.net/weixin_72049402/article/details/129394599