MyBatis 提供的resultType属性有以下几种:
- 引用结果类型:指向一个实体类或另一个 resultMap
- 基本的类型:int、long、String、Date、Map 等
- Cursor: 游标
其中 Cursor 结果类型有三种:
- forward only:只能向前遍历的游标。
<select id="selectAllUsers" resultType="forward only cursor">
select * from users
</select>
这种游标使用时,只能使用 rs.next() 遍历结果集。
一旦遍历后,不能再回到前面。通常用来优化内存使用。
- scroll insensitive:
<select id="selectAllUsers" resultType="scroll insensitive cursor">
select * from users
</select>
这种游标可以任意遍历结果集。
- scroll sensitive:
它不仅可以任意遍历结果集,还可以访问已经遍历过的行。
这三种游标类型的区别在于对结果集的访问方式:
- forward only 只能向前遍历
- scroll insensitive 可以随机访问
- scroll sensitive 可回访已经遍历的行
我们主要选择使用:
- forward only : 当只需要遍历结果集一次时
- scroll insensitive :需要多次访问结果集时
使用游标可以更好地优化遍历大结果集时的内存使用,避免将整个结果集映射到对象中。