myBatis-plus/myBatisフロークエリは、ビッグデータ量クエリが遅く、メモリオーバーフローの異常を解決します.
myBatis-plus/myBatisフロークエリー、ビッグデータ量クエリー
myBatisというオープンソースフレームワークのメリットは言うまでもなく、myBatis-plusはmyBatisの強化ツールで、フレームワークは私に多くのクエリーデータ方式を提供してくれて、とても便利で、ここではフロークエリー、つまりカーソルの方式でクエリーを紹介します.
私たちは仕事を完成する途中で大きなデータ量のクエリーに遭遇します.例えば、大量のデータのエクスポートなど、
整理クラスをすべて出して、便利に問題を探して、一部のローカルパスを遮断しました mapper
コメント: だけ前にスクロールすることを示す. は、エンティティタイプ に戻るように変換する.
注意:戻りタイプはvoidでなければなりませんよ. mapper呼び出し を使用
end
myBatisというオープンソースフレームワークのメリットは言うまでもなく、myBatis-plusはmyBatisの強化ツールで、フレームワークは私に多くのクエリーデータ方式を提供してくれて、とても便利で、ここではフロークエリー、つまりカーソルの方式でクエリーを紹介します.
私たちは仕事を完成する途中で大きなデータ量のクエリーに遭遇します.例えば、大量のデータのエクスポートなど、
list()
の方法で直接クエリーすると、フレームワークがデータベースクエリーの大量のデータを私たちが望んでいるエンティティクラスにカプセル化するのに多くの時間とメモリを費やしているので、遅いです.この過程で、私たちのプロジェクトレポートのメモリがOOM(out of memory)の異常をオーバーフローさせる可能性が高いので、この時、フレームワークのオリジナルデータでクエリーする必要があります.以下のようにします.整理クラスをすべて出して、便利に問題を探して、一部のローカルパスを遮断しました
package com.***.mapper;
import com.***.OrgData;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.ResultSetType;
import org.apache.ibatis.session.ResultHandler;
/**
* @Author sugar
*/
@Mapper
public interface OrgDataMapper extends BaseMapper<OrgData> {
@Select("select * from org_data t ${ew.customSqlSegment}")
@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
@ResultType(OrgData.class)
void getOrgWithBigData(@Param(Constants.WRAPPER) QueryWrapper<OrgData> wrapper, ResultHandler<OrgData> handler);
}
コメント:
@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
ResultSetType.FORWARD_ONLY
は、カーソルがfetchSize
毎取得量 @ResultType(OrgData.class)
注意:戻りタイプはvoidでなければなりませんよ.
handler
でデータを処理するので、このhanderも必要です.
orgDataMapper.getOrgWithBigData(queryWrapper,resultContext -> {
OrgData orgData = resultContext.getResultObject();
//
}
end