文章目录
当一次性从数据库中查询大量数据时,由于结果集非常大,容易导致内存OOM,此时可以采用 分页查询或者可以利用 Mybatis 中的 ResultHandler 来实现流式输出,分页查询前面章节已经介绍过了,下面看下mybatis如何利用流式输出的,流式输出就像游标一样,一条条的处理目标结果集。
Mybatis 中的 ResultHandler 相当于数据结果集的处理器,它是一个回调函数(Callback),用来处理每一行数据的结果,这个回调函数可以在查询结果处理到一定量时触发,对结果集数据进行定制化处理。
ResultHandler 的使用可以大幅提升数据处理的效率,当我们需要处理大量的数据时,一般会使用 ResultHandler 来进行结果的处理,避免一次查询就全部返回结果,浪费内存资源或造成 OOM。
下面我们看下如何利用ResultHandler一条一条的数据处理
还是以下面的PERSON表为例
我们要查询persion_id大于多少的数据,对应的mapper文件如下所示
<resultMap id="resultMap1" type="com.lzj.bean.Person">
<result column="PERSON_ID" property="id"></result>
<result column="PERSON_NAME" property="name"></result>
<result column="PERSON_AGE" property="age"></result>