resultmap的写法_Mybatis一对多关系的ResultMap写法

本文详细解析MyBatis中的ResultMap配置,包括ResultMap标签、collection标签、id标签、result标签及association标签的使用方法,并针对一对多、多对一等关系进行深入探讨。同时,还提供了解决查询集合只出现一条数据问题的具体方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ResultMap的写法

①ResultMap标签

type中应该填写返回值的pojo类型,例子中的User包含了用户的基本信息以及一个存放订单orders的pojo的list集合。orders的pojo除了订单信息,还包括了订单详细ordersdetail的list集合。

②collection标签

collection表示一对多的关系,property是定义好的集合类型,oftype指定集合中的元素类型。

③id标签

作用相当于外键,用于两表关联的标识。

④result标签

普通列,column对应数据库中表的列,property对应类中定义的属性。

⑤association标签

表示一对一的映射关系。

⑥结构分析

商品items和订单明细orderdetails是一对一的关系,通过association联系在一起。items和orderdetails整个关联体和order是多对一的关系。而用户和order是一对多关系,所以items和orderdetails的关联体以collection的方式包含在整个order的collection中。

Mybatis Collection查询集合只出现一条数据

1、原因

如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。

2、解决办法

级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的。但在mybatis中主从表需要为相同字段名设置别名。设置了别名就OK了。

MyBatis 中,一对多关系通常是通过嵌套结果集实现的。以下是一对多关系写法示例: 1. 定义实体类(Entity): ```java public class Order { private int id; private String orderNo; // 其他属性 private List<OrderItem> orderItems; // getter 和 setter 方法 } public class OrderItem { private int id; private String itemName; // 其他属性 // getter 和 setter 方法 } ``` 2. 编写映射文件(Mapper XML): ```xml <resultMap id="orderResultMap" type="Order"> <id property="id" column="id" /> <result property="orderNo" column="order_no" /> <!-- 其他属性映射 --> <collection property="orderItems" ofType="OrderItem" resultMap="orderItemResultMap" /> </resultMap> <resultMap id="orderItemResultMap" type="OrderItem"> <id property="id" column="id" /> <result property="itemName" column="item_name" /> <!-- 其他属性映射 --> </resultMap> <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT o.id, o.order_no, oi.id, oi.item_name FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id WHERE o.id = #{orderId} </select> ``` 3. 编写Mapper接口: ```java public interface OrderMapper { Order getOrderWithItems(int orderId); } ``` 4. 使用Mapper接口进行查询: ```java Order order = orderMapper.getOrderWithItems(1); ``` 以上示例中,通过嵌套结果集的方式,将一对多关系的数据映射到了Order对象的orderItems属性中。注意,需要在映射文件中定义两个resultMap,一个用于映射Or
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值