Mybatis学习(关联映射)

本文详细介绍了MyBatis中一对一、一对多及多对多的关联映射方法,包括如何使用<resultmap>、<association>和<collection>元素进行数据映射,以及嵌套查询和嵌套结果的不同应用。

一对一

在任意一方引入对方的主键作为外键

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 语句被执行,从而极大地消耗数据库性能并且会降低查询效率。

所以在简单的项目中可以使用嵌套查询的方式,而对于复杂的项目来说使用嵌套结果则比较好一点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值