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();
    }

 

posted @ 2023-12-18 15:04  都是城市惹的祸  阅读(161)  评论(0)    收藏  举报