如何在MyBatis中设置懒加载策略?
时间: 2024-12-19 22:15:36 浏览: 12
在MyBatis中,你可以通过设置`fetchType`属性来控制一对多关联的懒加载策略。这通常是通过`association`标签或者`collection`标签内的`fetch`元素来实现的。以下是几种常见的懒加载策略:
1. **默认值(Default)**:MyBatis的默认行为是惰性加载,即当直接访问关联的对象时才会去数据库获取,这是最节省资源的一种方式,但可能会引发N+1查询问题。
```xml
<select id="getUser" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id}
<!-- 默认不会加载用户的朋友列表 -->
</select>
<select id="getFriends" resultType="com.example.Friend">
SELECT * FROM friend WHERE userId = #{userId}
</select>
```
2. **EAGER** 或 **SELECT**:指定关联数据在第一次查询时就一起加载。这对于一次性获取所有关联信息的情况很有用。
```xml
<select id="getUserWithFriends" resultType="com.example.User">
SELECT u.*, f.* FROM user u LEFT JOIN friend f ON u.id = f.userId
WHERE u.id = #{id} fetch=select
</select>
```
3. **LAZY** 或 **JOIN**:当访问关联对象时才会发起一个新的查询。这是最常见的懒加载策略。
```xml
<select id="getUserWithLazyFriends" resultType="com.example.User">
SELECT u.* FROM user u
LEFT JOIN friend f ON u.id = f.userId
WHERE u.id = #{id} fetch=join
</select>
```
注意:懒加载会增加内存消耗,因为所有相关的对象都会保留在内存中,直到它们被显式地访问。如果频繁访问关联对象,可能会影响性能。
阅读全文