001package com.mybatisflex.spring.batch.builder;
002
003import com.mybatisflex.spring.batch.MyBatisFlexCursorItemReader;
004import com.mybatisflex.core.BaseMapper;
005import com.mybatisflex.core.query.QueryWrapper;
006import org.mybatis.spring.batch.MyBatisCursorItemReader;
007
008import java.util.Optional;
009
010/**
011 * MyBatisCursorItemReader 构造工具
012 * @author zhangjian
013 * @param <T>
014 */
015public class MyBatisFlexCursorItemReaderBuilder<T> {
016
017  /**
018   * mapper对象
019   */
020  private BaseMapper<T> mapper;
021
022  /**
023   * 查询条件对象
024   */
025  private QueryWrapper queryWrapper;
026
027  private Boolean saveState;
028
029  /**
030   * 最大读取行数
031   */
032  private Integer maxItemCount;
033
034  /**
035   * 设置mapper对象
036   * @param mapper
037   * @return
038   */
039  public MyBatisFlexCursorItemReaderBuilder<T> mapper(BaseMapper<T> mapper) {
040    this.mapper = mapper;
041    return this;
042  }
043
044  /**
045   * 设置查询条件
046   * @param queryWrapper
047   * @return
048   */
049  public MyBatisFlexCursorItemReaderBuilder<T> queryWrapper(QueryWrapper queryWrapper) {
050    this.queryWrapper = queryWrapper;
051    return this;
052  }
053
054  /**
055   * 保存状态标志位
056   * @param saveState
057   * @return
058   */
059  public MyBatisFlexCursorItemReaderBuilder<T> saveState(boolean saveState) {
060    this.saveState = saveState;
061    return this;
062  }
063
064  /**
065   * 数据读取最大行数
066   * @param maxItemCount
067   * @return
068   */
069  public MyBatisFlexCursorItemReaderBuilder<T> maxItemCount(int maxItemCount) {
070    this.maxItemCount = maxItemCount;
071    return this;
072  }
073
074  /**
075   * Returns a fully built {@link MyBatisFlexCursorItemReader}.
076   *
077   * @return the reader
078   */
079  public MyBatisFlexCursorItemReader<T> build() {
080    MyBatisFlexCursorItemReader<T> reader = new MyBatisFlexCursorItemReader<>();
081    reader.setMapper(this.mapper);
082    reader.setQueryWrapper(this.queryWrapper);
083    Optional.ofNullable(this.saveState).ifPresent(reader::setSaveState);
084    Optional.ofNullable(this.maxItemCount).ifPresent(reader::setMaxItemCount);
085    return reader;
086  }
087
088}