LoginSignup
2
5

More than 5 years have passed since last update.

MyBatisPagingItemReader/MyBatisCursorItemReader/MyBatisBatchItemWriterの実装サンプル

Posted at

はじめに

前回はJDBC系のItemReader/ItemWriterについてまとめましたが、今回は、MyBatis系のMyBatisPagingItemReader/MyBatisCursorItemReader/MyBatisBatchItemWriterの実装例をまとめてました。Spring Bacthのバージョンは4.0.1で、MyBatis-Springのバージョンは1.3.1です。
前回の記事はこちら

サンプルAPの仕様

サンプルAPの仕様は以前JDBC系のItemReader/ItemWriterについてまとめた時と同じです。
詳細は以前の記事を参照してください。

実装サンプル

MyBatisPagingItemReader

@Autowired
public DataSource dataSource;

@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);
    return (SqlSessionFactory) sessionFactory.getObject();
}

@Bean
public ItemReader myBatisPagingItemReader(SqlSessionFactory sqlSessionFactory) {
    MyBatisPagingItemReader reader = new MyBatisPagingItemReader();
    Map<String, Object> parameterValues = new HashMap<String, Object>();
    parameterValues.put("status","A");
    reader.setPageSize(1000);
    reader.setSqlSessionFactory(sqlSessionFactory);
    reader.setParameterValues(parameterValues);
    reader.setQueryId("dbaccess.mybatis.SampleMapper.selectStatusAbyPage");
    return reader;
}
<mapper namespace="dbaccess.mybatis.SampleMapper">

    <select id="selectStatusAbyPage" resultType="common.dto.Sample">
        SELECT
            id AS id,
            parameter1 AS parameter1,
            parameter2 AS parameter2,
            status AS status,
            last_update_timestamp AS lastUpdateTimestamp
        FROM
            sample
        WHERE
            status = #{status}
        LIMIT
            #{_skiprows},
            #{_pagesize}
    </select>

    //省略

</mapper>

MyBatisCursorItemReader


//SqlSessionFactoryBean、DataSourceの実装は省略

@Bean
public ItemReader myBatisCursorItemReader(SqlSessionFactory sqlSessionFactory) {
    MyBatisCursorItemReader reader = new MyBatisCursorItemReader();
    Map<String, Object> parameterValues = new HashMap<String, Object>();
    parameterValues.put("status","A");
    reader.setSqlSessionFactory(sqlSessionFactory);
    reader.setParameterValues(parameterValues);
    reader.setQueryId("dbaccess.mybatis.SampleMapper.selectStatusAbyCursor");
    return reader;
}
<mapper namespace="dbaccess.mybatis.SampleMapper">

    //省略

    <select id="selectStatusAbyCursor" resultType="common.dto.Sample">
        SELECT
            id AS id,
            parameter1 AS parameter1,
            parameter2 AS parameter2,
            status AS status,
            last_update_timestamp AS lastUpdateTimestamp
        FROM
            sample
        WHERE
            status = #{status}
    </select>

    //省略

</mapper>

MyBatisBatchItemWriter


//SqlSessionFactoryBean、DataSourceの実装は省略

@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH);
}

@Bean
public ItemWriter myBatisBatchItemWriter(SqlSessionTemplate sqlSessionTemplate) {
    MyBatisBatchItemWriter writer = new MyBatisBatchItemWriter();
    writer.setSqlSessionTemplate(sqlSessionTemplate);
    writer.setStatementId("dbaccess.mybatis.SampleMapper.insertSampleDataToSampleSub");   
    return writer;
}
<mapper namespace="dbaccess.mybatis.SampleMapper">
  
    //省略

    <insert id="insertSampleDataToSampleSub" parameterType="common.dto.Sample">
        INSERT INTO sample_sub (
            id,
            parameter1,
            parameter2,
            status,
            last_update_timestamp
        ) VALUES (
            #{id},
            #{parameter1},
            #{parameter2},
            #{status},
            #{lastUpdateTimestamp}
        )
    </insert>
</mapper>
2
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
2
5