N-1映射
N-1即 当关联的select语句返回的结果集只有一条记录
所谓关联映射,就是查询 A 表的数据,用一个java对象来映射,但是,这个java对象所需要的部分数据无法从 A 表中直接获得,要从 B 表中获取,当然,B 表获取的数据与 A 表相关联(一般为主从表的关系)。
关键思路:把无法直接获取的属性值另外拿出来分析,我们要从 B表 中另外查询数据用于填充这个属性,那么这个查询B表语句很显然要从A中提取某个数据,作为查询 B表 的依据(例如根据A表中的id,然后拿这个id值作为过滤条件,来查询B表)
基于Mapper.xml:
关键点:
我们已经知道,配置结果集映射时,普通属性直接为其制定column,property来完成 数据库列名 与 java对象属性名 之间的映射。
但是,有些数据并不能之间拿数据库列中数据来简单的填充java对象属性,这个时候不能简单的指定column,而是要另外关联一个select语句,根据这个select查询结果来填充这个特殊的属性。
所以程序中存在两个Mapper组件。
示例:
<select id="queryAddress" resultMap="addressMap">
select * from address where address_content regexp #{aa};
</select>
<select id="queryAddress2" resultMap="addressMap">
select * from address where address_personId = #{a}

本文详细介绍了MyBatis中的N-1和N-N映射。N-1映射适用于关联的select语句返回一条记录的情况,通过association标签或@One注解实现。N-N映射则涉及多条记录,需要使用collection标签或@Many注解,并指定javaType和ofType属性。文中强调了fetch属性在lazy和eager模式下的区别,并提供了最佳实践建议。
最低0.47元/天 解锁文章
2790

被折叠的 条评论
为什么被折叠?



