常见Mybatis流式读取Mysql数据有以下2种形式:

一种是通过ResultHandler<T>接口,另一个是通过Cursor<T>接口。

具体这两种方式有什么区别,暂时没有研究,只记录demo代码作为案例。

第一种ResultHandler<T>:

Mapper.xml文件:

这里注意需要加

resultSetType="FORWARD_ONLY" fetchSize="-2147483648"

为什么要加这个属性,暂时没研究。

<select id="streamQuery" resultSetType="FORWARD_ONLY" fetchSize="-2147483648"     resultMap="ResultMap">
    SELECT
    <include refid="Base_Column_List"/>
    FROM
    table_name
    WHERE 1=1
    <if test="field != null and field != ''">
      AND field=#{field}
    </if>
  </select>

DAO.java类:

void streamQuery (@Param("field") String field, ResultHandler<DO> resultHandler);

ServiceImpl.java类:

@Override
public void streamQuery() {
    DOMapper.streamQuery("", resultContext -> {
        DO do = resultContext.getResultObject();
        System.out.println("==:" + JSON.toJSONString(do));
    });
}

 

接下来是Cursor<T>:

Mapper.xml:

<select id="streamQuery" resultMap="ResultMap">
    SELECT
    <include refid="Base_Column_List"/>
    FROM
    table_name
    WHERE 1=1
    <if test="field != null and field != ''">
      AND field=#{field}
    </if>
</select>

DAO.java:

Cursor<DO> streamQuery(@Param("field") String field);

ServiceImpl.java:

@Override
public void streamQuery() throws IOException {
    String field = "xxx";
    try (SqlSession sqlSession = sqlSession.openSession();
        Cursor<DO> cursor = sqlSession.getMapper(DOMapper.class).streamQuery(field);
        ) {cursor.forEach( do -> {
        System.out.println("=====:" + JSON.toJSONString(do));
         });
        }
}

 


版权声明:本文为wellven_chen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wellven_chen/article/details/117114664