一对一
在任意一方引入对方的主键作为外键
mybatis中使用<resultmap>元素的子元素<association>来实现一对一关系


<resultmap>元素type属性指定本身查询对象 id属性用来指定该元素的唯一标识符
<id>子元素指定本身查询表的主键。<result>子元素的property属性指定本身查询对象属性,column属性指定本身查询表字段。
<association>元素 property属性指定在本身对象中定义的被关联查询对象,javatype属性指定被关联查询对象(完全限定名定义)。
<id>子元素指定被关联表主键。<result>子元素的property属性指定被关联查询对象属性,column属性指定被关联查询表字段。
一对多
在“多”的一方,添加“一”的一方的主键作为外键。
mybatis中使用<resultmap>元素的子元素<collection>来实现一对多关系
设计表时,可以在“多”的一方设置一个字段作为外键与“一”的一方主键对应。

一对多中,被关联的对象不用编写映射文件。
<resultMap>元素与其属性含义与一对一<resultMap>元素 一样,不同的使用<collection>元素来实现一对多。
而<collection>元素的属性含义与一对一中<association>元素的属于含义基本一致。
多对多 产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新 的宇段作为主键。
注意的是中间表中设置两个字段作为外键分别对应两个表的主键。

<resultMap>元素与其属性含义与一对多<resultMap>元素 一样,同样使用<collection>元素来实现多对多。
<collection>元素的属性含义与一对多中<collection>元素的属于含义基本一致。
多对多可以使用双方来查询对方,例如商品与订单是多对多关系,一个商品可以属于多个订单,而一个订单包含多个商品,根据商品可以查询到所属订单,根据订单可以查询到其中的商品。

两个对象的映射文件写法一致。
在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。 嵌套查询是指通过执行另外一条 SQL 映射语句来返回预期的复杂类型;嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集。


而这两种方式的sql语句也不相同
嵌套查询比较易懂。
嵌套结果比较复杂。
虽然使用嵌套查询的方式比较简单,但对于一对多,多对多来说,嵌套查询则要执行多条sql语句,这对于大型数据集合和列表展示不是很好,因为这样可能会导致成百上千条关联的SOL 语句被执行,从而极大地消耗数据库性能并且会降低查询效率。
所以在简单的项目中可以使用嵌套查询的方式,而对于复杂的项目来说使用嵌套结果则比较好一点。
本文详细介绍了MyBatis中一对一、一对多及多对多的关联映射方法,包括如何使用<resultmap>、<association>和<collection>元素进行数据映射,以及嵌套查询和嵌套结果的不同应用。

535

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



