All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mybatis.spring.batch.MyBatisPagingItemReader Maven / Gradle / Ivy

There is a newer version: 3.0.4
Show newest version
/*
 * Copyright 2010-2022 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.mybatis.spring.batch;

import static org.springframework.util.Assert.notNull;
import static org.springframework.util.ClassUtils.getShortName;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Supplier;

import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.batch.item.database.AbstractPagingItemReader;

/**
 * {@code org.springframework.batch.item.ItemReader} for reading database records using MyBatis in a paging fashion.
 * 

* Provided to facilitate the migration from Spring-Batch iBATIS 2 page item readers to MyBatis 3. * * @author Eduardo Macarron * * @since 1.1.0 */ public class MyBatisPagingItemReader extends AbstractPagingItemReader { private String queryId; private SqlSessionFactory sqlSessionFactory; private SqlSessionTemplate sqlSessionTemplate; private Map parameterValues; private Supplier> parameterValuesSupplier; public MyBatisPagingItemReader() { setName(getShortName(MyBatisPagingItemReader.class)); } /** * Public setter for {@link SqlSessionFactory} for injection purposes. * * @param sqlSessionFactory * a factory object for the {@link SqlSession}. */ public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } /** * Public setter for the statement id identifying the statement in the SqlMap configuration file. * * @param queryId * the id for the statement */ public void setQueryId(String queryId) { this.queryId = queryId; } /** * The parameter values to be used for the query execution. * * @param parameterValues * the values keyed by the parameter named used in the query string. */ public void setParameterValues(Map parameterValues) { this.parameterValues = parameterValues; } /** * The parameter supplier used to get parameter values for the query execution. * * @param parameterValuesSupplier * the supplier used to get values keyed by the parameter named used in the query string. * * @since 2.1.0 */ public void setParameterValuesSupplier(Supplier> parameterValuesSupplier) { this.parameterValuesSupplier = parameterValuesSupplier; } /** * Check mandatory properties. * * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); notNull(sqlSessionFactory, "A SqlSessionFactory is required."); notNull(queryId, "A queryId is required."); } @Override protected void doReadPage() { if (sqlSessionTemplate == null) { sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH); } Map parameters = new HashMap<>(); if (parameterValues != null) { parameters.putAll(parameterValues); } Optional.ofNullable(parameterValuesSupplier).map(Supplier::get).ifPresent(parameters::putAll); parameters.put("_page", getPage()); parameters.put("_pagesize", getPageSize()); parameters.put("_skiprows", getPage() * getPageSize()); if (results == null) { results = new CopyOnWriteArrayList<>(); } else { results.clear(); } results.addAll(sqlSessionTemplate.selectList(queryId, parameters)); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy