はじめに
前回は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>