Java tutorial
/* * Copyright (c) 2013 ITOCHU Techno-Solutions Corporation. * * 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 * * http://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 jp.co.ctc_g.jfw.core.jdbc; import java.sql.Connection; import java.util.List; import java.util.Map; import jp.co.ctc_g.jfw.core.util.Args; import jp.co.ctc_g.jfw.core.util.typeconverter.TypeConverters; import jp.co.ctc_g.jfw.paginate.Paginatable; import org.apache.ibatis.executor.BatchResult; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.SqlSession; /** * <p> * ????J-Framework ??? {@link SqlSession} ?? * SqlSession??????? * J-Framework??????????? * </p> * @author ITOCHU Techno-Solutions Corporation. * @see JxSqlSession * @see JxSqlSessionFactory * @see JxSqlSessionFactoryBuilder * @see PaginationEnableMatcher * @see CountSqlResolver * @see PaginatedResultHandler * @see Paginatable */ public class JxSqlSession implements SqlSession { private SqlSession delegate; private PaginationEnableMatcher paginationEnableMatcher; private CountSqlResolver countSqlResolver; private PaginatedResultHandler paginatedResultHandler; /** * ?? */ public JxSqlSession() { } /** * ?? {@link SqlSession}????????? * @param delegate ??SqlSession */ public JxSqlSession(SqlSession delegate) { this.delegate = delegate; } /** * {@link Paginatable} ????? * @param statement ?SQL?ID * @param parameter ????? * @return ??? */ protected <E> List<E> selectListWithPaginating(String statement, Paginatable parameter) { String countStatement = countSqlResolver.resolve(statement, parameter); Integer count = count(countStatement, parameter); List<E> result = delegate.selectList(statement, parameter); return paginatedResultHandler.createPaginatedResult(countStatement, parameter, count, result); } /** * {@link Paginatable} ????? * @param statement ?SQL?ID * @param parameter ??????? * @return ??? */ protected <E> List<E> selectListWithPaginating(String statement, Object parameter, RowBounds rowBounds) { String countStatement = countSqlResolver.resolve(statement, parameter); Integer count = count(countStatement, parameter); List<E> result = delegate.selectList(statement, parameter, rowBounds); return paginatedResultHandler.createPaginatedResult(countStatement, parameter, rowBounds, count, result); } /** * ???? * @param statement ?SQL?ID * @param parameter ?????? * @return */ protected Integer count(String statement, Object parameter) { Object result = delegate.selectOne(statement, parameter); Integer count = TypeConverters.convert(result, Integer.class); return Args.proper(count, 0); } /** * ???? * @param <E> ?? * @param statement ?SQL?ID * @param parameter ?????? * @return ? */ public <E> List<E> selectList(String statement, Object parameter) { return selectList(statement, parameter, RowBounds.DEFAULT); } /** * ???? * ???SQL?ID?{@link PaginationEnableMatcher}?? * ?????? * {@link #selectListWithPaginating(String, Paginatable)}??? * {@link #selectListWithPaginating(String, Object, RowBounds)}????? * ?? {@link RowBounds} ?? * paramter? {@link Paginatable} ???????? * @param <E> ?? * @param statement ?SQL?ID * @param parameter ?????? * @param rowBounds * @return ? */ public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) { if (paginationEnableMatcher.match(statement, parameter)) { if (parameter instanceof Paginatable && RowBounds.DEFAULT.equals(rowBounds)) { return selectListWithPaginating(statement, (Paginatable) parameter); } else { return selectListWithPaginating(statement, parameter, rowBounds); } } return delegate.selectList(statement, parameter, rowBounds); } /** * {@link CountSqlResolver}???? * @return {@link CountSqlResolver} */ public CountSqlResolver getCountSqlResolver() { return countSqlResolver; } /** * {@link CountSqlResolver}??? * @param countSqlResolver {@link CountSqlResolver} */ public void setCountSqlResolver(CountSqlResolver countSqlResolver) { this.countSqlResolver = countSqlResolver; } /** * {@link PaginatedResultHandler}???? * @return {@link PaginatedResultHandler} */ public PaginatedResultHandler getPaginatedResultHandler() { return paginatedResultHandler; } /** * {@link PaginatedResultHandler}??? * @param paginatedResultHandler {@link PaginatedResultHandler} */ public void setPaginatedResultHandler(PaginatedResultHandler paginatedResultHandler) { this.paginatedResultHandler = paginatedResultHandler; } /** * {@link PaginationEnableMatcher}???? * @return {@link PaginationEnableMatcher} */ public PaginationEnableMatcher getPaginationEnableMatcher() { return paginationEnableMatcher; } /** * {@link PaginationEnableMatcher}??? * @param paginationEnableMatcher {@link PaginationEnableMatcher} */ public void setPaginationEnableMatcher(PaginationEnableMatcher paginationEnableMatcher) { this.paginationEnableMatcher = paginationEnableMatcher; } // ??? --------------------------------------------------------------- /** * ??? {@link org.apache.ibatis.session.SqlSession#selectOne(String)} ?????? * {@inheritDoc} */ public <T> T selectOne(String statement) { return delegate.selectOne(statement); } /** * ??? {@link org.apache.ibatis.session.SqlSession#selectOne(String, Object)} ?????? * {@inheritDoc} */ public <T> T selectOne(String statement, Object parameter) { return delegate.selectOne(statement, parameter); } /** * ??? {@link org.apache.ibatis.session.SqlSession#selectList(String)} ?????? * {@inheritDoc} */ public <E> List<E> selectList(String statement) { return delegate.selectList(statement); } /** * ??? {@link org.apache.ibatis.session.SqlSession#selectMap(String, String)} ?????? * {@inheritDoc} */ public <K, V> Map<K, V> selectMap(String statement, String mapKey) { return delegate.selectMap(statement, mapKey); } /** * ??? {@link org.apache.ibatis.session.SqlSession#selectMap(String, Object, String)} ?????? * {@inheritDoc} */ public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey) { return delegate.selectMap(statement, parameter, mapKey); } /** * ??? {@link org.apache.ibatis.session.SqlSession#selectMap(String, Object, String, RowBounds)} ?????? * {@inheritDoc} */ public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds) { return delegate.selectMap(statement, parameter, mapKey, rowBounds); } /** * ??? {@link org.apache.ibatis.session.SqlSession#select(String, Object, RowBounds, ResultHandler)} ?????? * {@inheritDoc} */ public void select(String statement, Object parameter, ResultHandler handler) { delegate.select(statement, parameter, handler); } /** * ??? {@link org.apache.ibatis.session.SqlSession#select(String, ResultHandler)} ?????? * {@inheritDoc} */ public void select(String statement, ResultHandler handler) { delegate.select(statement, handler); } /** * ??? {@link org.apache.ibatis.session.SqlSession#select(String, Object, RowBounds, ResultHandler)} ?????? * {@inheritDoc} */ public void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler) { delegate.select(statement, parameter, rowBounds, handler); } /** * ??? {@link org.apache.ibatis.session.SqlSession#insert(String)} ?????? * {@inheritDoc} */ public int insert(String statement) { return delegate.insert(statement); } /** * ??? {@link org.apache.ibatis.session.SqlSession#insert(String, Object)} ?????? * {@inheritDoc} */ public int insert(String statement, Object parameter) { return delegate.insert(statement, parameter); } /** * ??? {@link org.apache.ibatis.session.SqlSession#update(String)} ?????? * {@inheritDoc} */ public int update(String statement) { return delegate.update(statement); } /** * ??? {@link org.apache.ibatis.session.SqlSession#update(String, Object)} ?????? * {@inheritDoc} */ public int update(String statement, Object parameter) { return delegate.update(statement, parameter); } /** * ??? {@link org.apache.ibatis.session.SqlSession#delete(String)} ?????? * {@inheritDoc} */ public int delete(String statement) { return delegate.delete(statement); } /** * ??? {@link org.apache.ibatis.session.SqlSession#delete(String, Object)} ?????? * {@inheritDoc} */ public int delete(String statement, Object parameter) { return delegate.delete(statement, parameter); } /** * ??? {@link org.apache.ibatis.session.SqlSession#commit()} ?????? * {@inheritDoc} */ public void commit() { delegate.commit(); } /** * ??? {@link org.apache.ibatis.session.SqlSession#commit(boolean)} ?????? * {@inheritDoc} */ public void commit(boolean force) { delegate.commit(force); } /** * ??? {@link org.apache.ibatis.session.SqlSession#rollback()} ?????? * {@inheritDoc} */ public void rollback() { delegate.rollback(); } /** * ??? {@link org.apache.ibatis.session.SqlSession#rollback(boolean)} ?????? * {@inheritDoc} */ public void rollback(boolean force) { delegate.rollback(force); } /** * ??? {@link org.apache.ibatis.session.SqlSession#close()} ?????? * {@inheritDoc} */ public void close() { delegate.close(); } /** * ??? {@link org.apache.ibatis.session.SqlSession#clearCache()} ?????? * {@inheritDoc} */ public void clearCache() { delegate.clearCache(); } /** * ??? {@link org.apache.ibatis.session.SqlSession#getConfiguration()} ?????? * {@inheritDoc} */ public Configuration getConfiguration() { return delegate.getConfiguration(); } /** * ??? {@link org.apache.ibatis.session.SqlSession#getMapper(Class)} ?????? * {@inheritDoc} */ public <T> T getMapper(Class<T> type) { return delegate.getMapper(type); } /** * ??? {@link org.apache.ibatis.session.SqlSession#getConnection()} ?????? * {@inheritDoc} */ public Connection getConnection() { return delegate.getConnection(); } /** * ??? {@link org.apache.ibatis.session.SqlSession#flushStatements()} ?????? * {@inheritDoc} */ public List<BatchResult> flushStatements() { return delegate.flushStatements(); } }