【MyBatis】MyBatis 的游标向前只读分别用来做什么?

MyBatis 提供的resultType属性有以下几种:

  • 引用结果类型:指向一个实体类或另一个 resultMap
  • 基本的类型:int、long、String、Date、Map 等
  • Cursor: 游标

其中 Cursor 结果类型有三种:

  1. forward only:只能向前遍历的游标。
<select id="selectAllUsers" resultType="forward only cursor">
  select * from users
</select>

这种游标使用时,只能使用 rs.next() 遍历结果集。
一旦遍历后,不能再回到前面。通常用来优化内存使用。

  1. scroll insensitive:
<select id="selectAllUsers" resultType="scroll insensitive cursor"> 
 select * from users
</select>

这种游标可以任意遍历结果集。

  1. scroll sensitive:
    它不仅可以任意遍历结果集,还可以访问已经遍历过的行。

这三种游标类型的区别在于对结果集的访问方式:

  • forward only 只能向前遍历
  • scroll insensitive 可以随机访问
  • scroll sensitive 可回访已经遍历的行

我们主要选择使用:

  • forward only : 当只需要遍历结果集一次时
  • scroll insensitive :需要多次访问结果集时

使用游标可以更好地优化遍历大结果集时的内存使用,避免将整个结果集映射到对象中。