LoginSignup
6
5

More than 5 years have passed since last update.

Spring-Batch MyBatisPagingItemReaderの使い方

Last updated at Posted at 2016-04-20

Spring-BatchにおけるMyBatisPagingItemReaderの実装方法に関して、ググッても全く出てこなかったので仕方なくライブラリのソースを読みつつ実装したので以下に残す。

SampleBatchConfiguration.java
    @Autowired
    SqlSessionFactory sqlSessionFactory;

    @Bean
    public MyBatisPagingItemReader<SampleDto> reader() {
        MyBatisPagingItemReader<SampleDto> reader = new MyBatisPagingItemReader<SampleDto>();
        Map<String, Object> parameterValues = new HashMap<String, Object>();
        parameterValues.put("param1", "sample");
        reader.setQueryId("XXX.AAA.SampleQuery");
        reader.setPageSize(10000);
        reader.setParameterValues(parameterValues);
        reader.setSqlSessionFactory(sqlSessionFactory);
        return reader;
    }

はまったのは、以下の3点。

setQueryId()に指定するクエリIDは、mybatis-config.xml<mappers><mapper>タグで設定されたすべてのXMLファイルの中で一意のIDのものを指定する、またはフルパス指定する。
SqlSessionFactoryを設定しないと(確か)IllegalArgumentExceptionが発生する
③クエリの書き方

①は、各XMLファイルの先頭に<resultMap id="BaseResultMap" type="XXX.AAA" >とあり、対象クエリが<select id="SampleQuery" resultMap="BaseResultMap" parameterType="XXX.AAA.SampleExample" >というタグで宣言されている場合の例。SampleQueryが全XMLの中で一意であればXXX.AAA.は省略出来る。

②は、インターフェースであるSqlSessionFactory@Autowiredすれば、自動的にデフォルトのインスタンスが設定されるのでそれをsetSqlSessionFactory()にて設定する。

SELECT id, name, job FROM employees ORDER BY id ASC LIMIT #{_skiprows}, #{_pagesize}のように、LIMIT #{_skiprows}, #{_pagesize}が必須。
以下参考
http://www.mybatis.org/spring/ja/batch.html

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5