Java mybatis流查询
1、mapper
// resultSetType="FORWARD_ONLY" fetchSize="100" @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000) void get(XxxResultHandler handler, @Param("pm") Object o);
2、流处理
import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.ResultContext; import org.apache.ibatis.session.ResultHandler; import java.util.ArrayList; import java.util.List; @Slf4j public class XxxResultHandler implements ResultHandler<Xxx> { /** * 这里每集满n条数据 往硬盘的excel文件中追加一次数据 */ // private final static int BATCH_SIZE = 1000; /** * 计数器 */ // private int size = 0; /** * 存储每批数据的临时容器 */ private List<Xxx> list = new ArrayList<>(); @Override public void handleResult(ResultContext<? extends Xxx> resultContext) { // 这里获取流式查询每次返回的单条结果 Xxx obj = resultContext.getResultObject(); list.add(obj); // size++; // if (size == BATCH_SIZE) { // // 如果集满n条就往文件中写一次 // handle(); // } } /** * 集满n条 执行一次的逻辑 */ // private void handle() { // try { // // 在这里可以对你获取到的批量结果数据进行需要的业务处理 // // 这里的业务是 往文件中写一次 // log.info("size => {}", list.size()); // } finally { // // 处理完每批数据后后将临时清空 // size = 0; // list.clear(); // } // } /** * 这个方法给外面调用,用来完成最后一批数据处理 */ // public void end() { // handle();// 处理最后一批不到BATCH_SIZE的数据 // } public List<Xxx> list() { return this.list; } }
3、service调用
public List<Xxx> get(Object o) { XxxResultHandler handler = new XxxResultHandler(); this.baseMapper.get(handler, o); return handler.list(); }
有些事情,没经历过不知道原理,没失败过不明白奥妙,没痛苦过不了解真谛。临渊羡鱼,不如退而结网!

浙公网安备 33010602011771号