Mapper.xml中对象的关联

对象的关联,特别是manytoone的关联,有两种方式:发送一条额外sql去查询和内联的方式

发送一条额外sql:当我在使用到这个关联对象的时候,我发送一条额外的sql去把这个关联的对象查询出来,然后设置到对象里面,这样容易造成n+1的问题

内联方式:在这条sql直接把关联的对象的表连接进来,把需要查询的信息全部查出来,然后直接在resultMap中拼装出关联的对象,这样就可以避免n+1的问题,但是会造成连接的性能损耗

选用原则 :

如果关联的对象要在列表中显示,那么直接使用内联的方式,会造成表关联的性能损耗

如果要在查看这个对象时才显示,则选择使用发送一条额外的sql进行查询的方式,但是会造成n+1的问题

选用哪种方式?

 选用发送一条额外sql

因为在列表中不用显示借款人的信息,而是当我们要去查看这个借款人的信息时,当我们要去查看他的借款明细的时候,才会去点开看他的信息,这个属性要查看某个对象时,才会显示。

 

mapper.xml中关联的写法

使用发送额外的sql查询,则下面这条sql语句不用变

 

乐观锁的问题

 

 

 

n+1问题,网上查了下资源

 

转载于:https://www.cnblogs.com/Girlir/p/7806834.html

在MyBatis框架mapper.xml文件是用来定义SQL语句和映射关系的配置文件。一对一关系通常是指数据库的两个表,其一个表的每条记录都与另一个表的唯一一条记录相关联。 在mapper.xml实现一对一关系,通常会使用MyBatis提供的几种关联映射方,如 `<resultMap>` 元素来定义对象之间的关系映射。以下是一个简单的例子来说明如何在mapper.xml配置一对一关系: ```xml <resultMap id="userAccountMap" type="User"> <id property="id" column="id"/> <result property="username" column="username"/> <association property="account" javaType="Account"> <id property="id" column="account_id"/> <result property="balance" column="balance"/> <!-- 其他Account表的字段映射 --> </association> <!-- 其他User表的字段映射 --> </resultMap> <select id="selectUserById" resultMap="userAccountMap"> SELECT u.id, u.username, a.id as account_id, a.balance FROM users u LEFT JOIN accounts a ON u.account_id = a.id WHERE u.id = #{id} </select> ``` 在上面的例子,我们定义了一个名为 `userAccountMap` 的 `resultMap`,它将用户表(users)和账户表(accounts)通过一对一的方映射。这里我们使用了 `<association>` 标签来表示 `User` 对象的 `account` 属性与 `Account` 类型对象关联。通过 `property` 属性指定User对象的属性名,通过 `javaType` 指定属性的Java类型。此外,SQL查询语句通过 `LEFT JOIN` 连接两个表,并通过别名 `account_id` 来关联两个表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值