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

com.talanlabs.mybatis.rsql.statement.RsqlMappedStatementFactory Maven / Gradle / Ivy

The newest version!
package com.talanlabs.mybatis.rsql.statement;

import com.talanlabs.component.IComponent;
import com.talanlabs.mybatis.component.cache.CacheNameHelper;
import com.talanlabs.mybatis.component.resultmap.ResultMapNameHelper;
import com.talanlabs.mybatis.component.session.ComponentConfiguration;
import com.talanlabs.mybatis.component.session.factory.AbstractMappedStatementFactory;
import com.talanlabs.mybatis.rsql.configuration.IRsqlConfiguration;
import com.talanlabs.mybatis.rsql.statement.sqlsource.RsqlSqlSource;
import org.apache.ibatis.cache.Cache;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ResultMap;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Collections;

public class RsqlMappedStatementFactory extends AbstractMappedStatementFactory {

    private static final Logger LOG = LogManager.getLogger(RsqlMappedStatementFactory.class);

    private final IRsqlConfiguration rsqlConfiguration;

    public RsqlMappedStatementFactory(IRsqlConfiguration rsqlConfiguration) {
        super();

        this.rsqlConfiguration = rsqlConfiguration;
    }

    @Override
    public boolean acceptKey(String key) {
        return RsqlStatementNameHelper.isRsqlKey(key);
    }

    @Override
    public MappedStatement createMappedStatement(ComponentConfiguration componentConfiguration, String key) {
        if (RsqlStatementNameHelper.isRsqlKey(key)) {
            Class componentClass = RsqlStatementNameHelper.extractComponentClassInRsqlKey(key);
            if (componentClass != null) {
                return createRsqlMappedStatement(componentConfiguration, key, componentClass);
            }
        }
        return null;
    }

    private  MappedStatement createRsqlMappedStatement(ComponentConfiguration componentConfiguration, String key, Class componentClass) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("Create rsql for " + componentClass);
        }

        ResultMap inlineResultMap = componentConfiguration.getResultMap(ResultMapNameHelper.buildResultMapKey(componentClass));

        MappedStatement.Builder msBuilder = new MappedStatement.Builder(componentConfiguration, key, new RsqlSqlSource<>(componentConfiguration, rsqlConfiguration, componentClass),
                SqlCommandType.SELECT);

        msBuilder.resultMaps(Collections.singletonList(inlineResultMap));
        Cache cache = componentConfiguration.getCache(CacheNameHelper.buildCacheKey(componentClass));
        msBuilder.flushCacheRequired(false);
        msBuilder.cache(cache);
        msBuilder.useCache(true);
        return msBuilder.build();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy