mybatis设置fetchSize
时间: 2025-06-28 07:19:40 浏览: 6
### 设置 MyBatis 中的 `fetchSize` 以优化查询性能
为了提高数据库查询效率,在使用 MyBatis 进行数据访问时可以通过设置 JDBC 的 `fetchSize` 参数来控制每次从数据库获取的数据量。这有助于减少内存占用并提升大结果集处理的速度。
#### 方法一:通过 XML 映射文件配置 Fetch Size
可以在 SQL 映射语句中直接指定 `fetchSize` 属性:
```xml
<select id="selectUsers" resultType="map">
SELECT * FROM users WHERE status = #{status}
</select>
<settings>
<!-- 配置全局默认 fetch size -->
<setting name="defaultStatementTimeout" value="30"/>
<setting name="defaultFetchSize" value="100"/>
</settings>
```
对于特定查询,也可以单独定义该属性[^1]。
#### 方法二:编程方式设定 Fetch Size
除了静态配置外,还可以动态调整每条语句的 `fetchSize` 值。这种方式更加灵活,允许根据不同场景自适应地改变参数值。
```java
@Select("SELECT * FROM users WHERE status = #{status}")
@Options(fetchSize=100)
List<User> selectUsers(@Param("status") String status);
```
或者是在执行查询前手动设置 Statement 对象上的 `setFetchSize()` 方法:
```java
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
// 获取原始 Jdbc Statement 并调用 setFetchSize()
List<User> list = ((ResultSetExtractor<List<User>>) rs -> {
try {
rs.getStatement().setFetchSize(100);
return new ArrayList<>();
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
}).extractData(mapper.selectUsers(status));
}
```
以上两种方法都可以有效地帮助应用程序开发者管理大数据量情况下的资源消耗问题,从而达到更好的性能表现[^2]。
阅读全文
相关推荐


















