jp.co.ctc_g.jfw.core.jdbc.JxSqlSession.java Source code

Java tutorial

Introduction

Here is the source code for jp.co.ctc_g.jfw.core.jdbc.JxSqlSession.java

Source

/*
 * 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();
    }
}