Example usage for org.apache.ibatis.mapping BoundSql getParameterMappings

List of usage examples for org.apache.ibatis.mapping BoundSql getParameterMappings

Introduction

In this page you can find the example usage for org.apache.ibatis.mapping BoundSql getParameterMappings.

Prototype

public List<ParameterMapping> getParameterMappings() 

Source Link

Usage

From source file:core.plugin.mybatis.ExecuteSqlLogInterceptor.java

License:Apache License

private static String getRuntimeExeSql(Configuration configuration, BoundSql boundSql) {
    Object parameterObject = boundSql.getParameterObject();
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
    if (parameterMappings.size() > 0 && parameterObject != null) {
        TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
        if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
            sql = sql.replaceFirst("\\?", getParameterValue(parameterObject));
        } else {/*  w w w.  ja va 2 s  .  c o m*/
            MetaObject metaObject = configuration.newMetaObject(parameterObject);
            for (ParameterMapping parameterMapping : parameterMappings) {
                String propertyName = parameterMapping.getProperty();
                if (metaObject.hasGetter(propertyName)) {
                    Object obj = metaObject.getValue(propertyName);
                    sql = sql.replaceFirst("\\?", getParameterValue(obj));
                } else if (boundSql.hasAdditionalParameter(propertyName)) {
                    Object obj = boundSql.getAdditionalParameter(propertyName);
                    sql = sql.replaceFirst("\\?", getParameterValue(obj));
                }
            }
        }
    }
    return sql;
}

From source file:org.fire.platform.common.page.parser.impl.AbstractParser.java

License:Open Source License

@SuppressWarnings({ "rawtypes", "unchecked" })
public Map setPageParameter(MappedStatement ms, Object parameterObject, BoundSql boundSql, Page page) {
    Map paramMap = null;//www . java  2 s . c o  m
    if (parameterObject == null) {
        paramMap = new HashMap();
    } else if (parameterObject instanceof Map) {
        paramMap = (Map) parameterObject;
    } else {
        paramMap = new HashMap();
        //?sql??ParameterMapping?getter
        //TypeHandlerRegistry???
        boolean hasTypeHandler = ms.getConfiguration().getTypeHandlerRegistry()
                .hasTypeHandler(parameterObject.getClass());
        MetaObject metaObject = SystemMetaObject.forObject(parameterObject);
        //??MyProviderSqlSource?
        if (ms.getSqlSource() instanceof PageProviderSqlSource) {
            paramMap.put(PROVIDER_OBJECT, parameterObject);
        }
        if (!hasTypeHandler) {
            for (String name : metaObject.getGetterNames()) {
                paramMap.put(name, metaObject.getValue(name));
            }
        }
        //????
        if (boundSql.getParameterMappings() != null && boundSql.getParameterMappings().size() > 0) {
            for (ParameterMapping parameterMapping : boundSql.getParameterMappings()) {
                String name = parameterMapping.getProperty();
                if (!name.equals(PAGEPARAMETER_FIRST) && !name.equals(PAGEPARAMETER_SECOND)
                        && paramMap.get(name) == null) {
                    if (hasTypeHandler || parameterMapping.getJavaType().equals(parameterObject.getClass())) {
                        paramMap.put(name, parameterObject);
                        break;
                    }
                }
            }
        }
    }
    //?
    paramMap.put(ORIGINAL_PARAMETER_OBJECT, parameterObject);
    return paramMap;
}

From source file:org.fire.platform.common.page.sqlsource.PageProviderSqlSource.java

License:Open Source License

@SuppressWarnings("rawtypes")
@Override//from w w w .j a  v  a  2s  .c  om
public BoundSql getBoundSql(Object parameterObject) {
    BoundSql boundSql = null;
    if (parameterObject instanceof Map && ((Map) parameterObject).containsKey(PROVIDER_OBJECT)) {
        boundSql = providerSqlSource.getBoundSql(((Map) parameterObject).get(PROVIDER_OBJECT));
    } else {
        boundSql = providerSqlSource.getBoundSql(parameterObject);
    }
    if (count) {
        return new BoundSql(configuration, parser.getCountSql(boundSql.getSql()),
                boundSql.getParameterMappings(), parameterObject);
    } else {
        return new BoundSql(configuration, parser.getPageSql(boundSql.getSql()),
                parser.getPageParameterMapping(configuration, boundSql), parameterObject);
    }
}

From source file:org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfigurationTest.java

License:Apache License

@Test
void testCustomThymeleafConfig() {
    this.context.register(ThymeleafCustomLanguageDriverConfig.class,
            MybatisLanguageDriverAutoConfiguration.class);
    this.context.refresh();
    ThymeleafLanguageDriver driver = this.context.getBean(ThymeleafLanguageDriver.class);
    SqlSource sqlSource = driver.createSqlSource(new Configuration(),
            "SELECT * FROM users WHERE id = /*[# m:p='id']*/ 1 /*[/]*/", Integer.class);
    BoundSql boundSql = sqlSource.getBoundSql(10);
    assertThat(boundSql.getSql()).isEqualTo("SELECT * FROM users WHERE id = ?");
    assertThat(boundSql.getParameterObject()).isEqualTo(10);
    assertThat(boundSql.getParameterMappings().get(0).getProperty()).isEqualTo("id");
    assertThat(boundSql.getParameterMappings().get(0).getJavaType()).isEqualTo(Integer.class);
    ThymeleafLanguageDriverConfig config = this.context.getBean(ThymeleafLanguageDriverConfig.class);
    assertThat(config.isUse2way()).isEqualTo(true);
    assertThat(config.getDialect().getPrefix()).isEqualTo("m");
    assertThat(config.getDialect().getLikeAdditionalEscapeTargetChars()).isNull();
    assertThat(config.getDialect().getLikeEscapeChar()).isEqualTo('\\');
    assertThat(config.getDialect().getLikeEscapeClauseFormat()).isEqualTo("ESCAPE '%s'");
    assertThat(config.getTemplateFile().getBaseDir()).isEqualTo("");
    assertThat(config.getTemplateFile().getCacheTtl()).isNull();
    assertThat(config.getTemplateFile().getEncoding()).isEqualTo(StandardCharsets.UTF_8);
    assertThat(config.getTemplateFile().getPatterns()).hasSize(1).contains("*.sql");
    assertThat(config.getCustomizer()).isNull();
}

From source file:org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfigurationTest.java

License:Apache License

@Test
void testCustomFreeMarkerConfig() {
    this.context.register(FreeMarkerCustomLanguageDriverConfig.class,
            MybatisLanguageDriverAutoConfiguration.class);
    this.context.refresh();
    FreeMarkerLanguageDriver driver = this.context.getBean(FreeMarkerLanguageDriver.class);
    @SuppressWarnings("unused")
    class Param {
        private Integer id;
        private Integer version;
    }/*w w w. j  a v  a2 s . c  om*/
    Param params = new Param();
    params.id = 10;
    params.version = 20;
    SqlSource sqlSource = driver.createSqlSource(new Configuration(),
            "SELECT * FROM users WHERE id = #{id} and version = <@p name='version'/>", Param.class);
    BoundSql boundSql = sqlSource.getBoundSql(params);
    assertThat(boundSql.getSql()).isEqualTo("SELECT * FROM users WHERE id = ? and version = ?");
    assertThat(boundSql.getParameterMappings().get(0).getProperty()).isEqualTo("id");
    assertThat(boundSql.getParameterMappings().get(0).getJavaType()).isEqualTo(Integer.class);
    assertThat(boundSql.getParameterMappings().get(1).getProperty()).isEqualTo("version");
    assertThat(boundSql.getParameterMappings().get(1).getJavaType()).isEqualTo(Integer.class);
    FreeMarkerLanguageDriverConfig config = this.context.getBean(FreeMarkerLanguageDriverConfig.class);
    assertThat(config.getBasePackage()).isEqualTo("");
    assertThat(config.getFreemarkerSettings()).hasSize(1);
    assertThat(config.getFreemarkerSettings().get("interpolation_syntax")).isEqualTo("dollar");
}

From source file:org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfigurationTest.java

License:Apache License

@Test
void testCustomThymeleafConfigUsingConfigurationProperty() {
    TestPropertyValues.of("mybatis.scripting-language-driver.thymeleaf.use2way=false",
            "mybatis.scripting-language-driver.thymeleaf.dialect.like-additional-escape-target-chars=*,?",
            "mybatis.scripting-language-driver.thymeleaf.dialect.like-escape-char=~",
            "mybatis.scripting-language-driver.thymeleaf.dialect.like-escape-clause-format=escape '%s'",
            "mybatis.scripting-language-driver.thymeleaf.dialect.prefix=mybatis",
            "mybatis.scripting-language-driver.thymeleaf.template-file.base-dir=sqls",
            "mybatis.scripting-language-driver.thymeleaf.template-file.cache-enabled=false",
            "mybatis.scripting-language-driver.thymeleaf.template-file.cache-ttl=1234",
            "mybatis.scripting-language-driver.thymeleaf.template-file.encoding=Windows-31J",
            "mybatis.scripting-language-driver.thymeleaf.template-file.patterns=*.sql,*.sqlf",
            "mybatis.scripting-language-driver.thymeleaf.customizer=org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfigurationTest$MyTemplateEngineCustomizer")
            .applyTo(this.context);
    this.context.register(MyAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class);
    this.context.refresh();
    ThymeleafLanguageDriver driver = this.context.getBean(ThymeleafLanguageDriver.class);
    SqlSource sqlSource = driver.createSqlSource(new Configuration(),
            "SELECT * FROM users WHERE id = [# mybatis:p='id' /]", Integer.class);
    BoundSql boundSql = sqlSource.getBoundSql(10);
    assertThat(boundSql.getSql()).isEqualTo("SELECT * FROM users WHERE id = ?");
    assertThat(boundSql.getParameterObject()).isEqualTo(10);
    assertThat(boundSql.getParameterMappings().get(0).getProperty()).isEqualTo("id");
    assertThat(boundSql.getParameterMappings().get(0).getJavaType()).isEqualTo(Integer.class);
    ThymeleafLanguageDriverConfig config = this.context.getBean(ThymeleafLanguageDriverConfig.class);
    assertThat(config.isUse2way()).isEqualTo(false);
    assertThat(config.getDialect().getPrefix()).isEqualTo("mybatis");
    assertThat(config.getDialect().getLikeAdditionalEscapeTargetChars()).hasSize(2).contains('*', '?');
    assertThat(config.getDialect().getLikeEscapeChar()).isEqualTo('~');
    assertThat(config.getDialect().getLikeEscapeClauseFormat()).isEqualTo("escape '%s'");
    assertThat(config.getTemplateFile().getBaseDir()).isEqualTo("sqls");
    assertThat(config.getTemplateFile().getCacheTtl()).isEqualTo(1234);
    assertThat(config.getTemplateFile().getEncoding()).isEqualTo(Charset.forName("Windows-31J"));
    assertThat(config.getTemplateFile().getPatterns()).hasSize(2).contains("*.sql", "*.sqlf");
    assertThat(config.getCustomizer()).isEqualTo(MyTemplateEngineCustomizer.class);
}

From source file:org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfigurationTest.java

License:Apache License

@Test
void testCustomFreeMarkerConfigUsingConfigurationProperty() {
    TestPropertyValues.of("mybatis.scripting-language-driver.freemarker.base-package=sqls",
            "mybatis.scripting-language-driver.freemarker.freemarker-settings.interpolation_syntax=dollar",
            "mybatis.scripting-language-driver.freemarker.freemarker-settings.whitespace_stripping=yes")
            .applyTo(this.context);
    this.context.register(MyAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class);
    this.context.refresh();
    FreeMarkerLanguageDriver driver = this.context.getBean(FreeMarkerLanguageDriver.class);
    @SuppressWarnings("unused")
    class Param {
        private Integer id;
        private Integer version;
    }/* ww w  .ja v a  2  s.  com*/
    Param params = new Param();
    params.id = 10;
    params.version = 20;
    SqlSource sqlSource = driver.createSqlSource(new Configuration(),
            "SELECT * FROM users WHERE id = #{id} and version = <@p name='version'/>", Param.class);
    BoundSql boundSql = sqlSource.getBoundSql(params);
    assertThat(boundSql.getSql()).isEqualTo("SELECT * FROM users WHERE id = ? and version = ?");
    assertThat(boundSql.getParameterMappings().get(0).getProperty()).isEqualTo("id");
    assertThat(boundSql.getParameterMappings().get(0).getJavaType()).isEqualTo(Integer.class);
    assertThat(boundSql.getParameterMappings().get(1).getProperty()).isEqualTo("version");
    assertThat(boundSql.getParameterMappings().get(1).getJavaType()).isEqualTo(Integer.class);
    FreeMarkerLanguageDriverConfig config = this.context.getBean(FreeMarkerLanguageDriverConfig.class);
    assertThat(config.getBasePackage()).isEqualTo("sqls");
    assertThat(config.getFreemarkerSettings()).hasSize(2);
    assertThat(config.getFreemarkerSettings().get("interpolation_syntax")).isEqualTo("dollar");
    assertThat(config.getFreemarkerSettings().get("whitespace_stripping")).isEqualTo("yes");
}

From source file:org.njqspringboot.support.mybatis.locker.interceptor.OptimisticLocker.java

License:Open Source License

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object intercept(Invocation invocation) throws Exception {

    String versionColumn;//from  www  . j  av a 2s  . c  o  m
    if (null == props || props.isEmpty()) {
        versionColumn = "version";
    } else {
        versionColumn = props.getProperty("versionColumn", "version");
    }

    String interceptMethod = invocation.getMethod().getName();
    if ("prepare".equals(interceptMethod)) {

        StatementHandler handler = (StatementHandler) PluginUtil.processTarget(invocation.getTarget());
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("delegate.mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }

        BoundSql boundSql = (BoundSql) hm.getValue("delegate.boundSql");

        VersionLocker vl = getVersionLocker(ms, boundSql);
        if (null != vl && !vl.value()) {
            return invocation.proceed();
        }

        Object originalVersion = hm.getValue("delegate.boundSql.parameterObject." + versionColumn);
        Object versionIncr = castTypeAndOptValue(originalVersion,
                hm.getValue("delegate.boundSql.parameterObject"), ValueType.INCREASE);
        hm.setValue("delegate.boundSql.parameterObject." + versionColumn, versionIncr);

        String originalSql = (String) hm.getValue("delegate.boundSql.sql");
        StringBuilder builder = new StringBuilder(originalSql);
        builder.append(" and ");
        builder.append(versionColumn);
        builder.append(" = ?");
        hm.setValue("delegate.boundSql.sql", builder.toString());

        if (log.isDebugEnabled()) {
            log.debug("==> originalSql: " + originalSql);
        }

        return invocation.proceed();

    } else if ("setParameters".equals(interceptMethod)) {

        ParameterHandler handler = (ParameterHandler) PluginUtil.processTarget(invocation.getTarget());
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }

        Configuration configuration = ms.getConfiguration();
        BoundSql boundSql = (BoundSql) hm.getValue("boundSql");

        VersionLocker vl = getVersionLocker(ms, boundSql);
        if (null != vl && !vl.value()) {
            return invocation.proceed();
        }

        Object result = invocation.proceed();

        ParameterMapping versionMapping = new ParameterMapping.Builder(configuration, versionColumn,
                Object.class).build();

        Object parameterObject = boundSql.getParameterObject();

        MetaObject pm = configuration.newMetaObject(parameterObject);
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            MapperMethod.ParamMap<?> paramMap = (MapperMethod.ParamMap<?>) parameterObject;
            if (!paramMap.containsKey(versionColumn)) {
                throw new TypeException("All the base type parameters must add MyBatis's @Param Annotaion");
            }
        }
        Object value = pm.getValue(versionColumn);
        TypeHandler typeHandler = versionMapping.getTypeHandler();
        JdbcType jdbcType = versionMapping.getJdbcType();

        if (value == null && jdbcType == null) {
            jdbcType = configuration.getJdbcTypeForNull();
        }
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        try {
            PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0];
            Object val = castTypeAndOptValue(value, parameterObject, ValueType.DECREASE);
            typeHandler.setParameter(ps, parameterMappings.size() + 1, val, jdbcType);
        } catch (TypeException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        } catch (SQLException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        }
        return result;
    }
    return invocation.proceed();
}

From source file:org.solmix.datax.mybatis.page.PageInterceptor.java

License:Open Source License

private BoundSql copyFromBoundSql(MappedStatement ms, BoundSql boundSql, String sql, Object parameterObject) {
    BoundSql newBoundSql = new BoundSql(ms.getConfiguration(), sql, boundSql.getParameterMappings(),
            parameterObject);/*from ww w  . j av a  2  s .  c  o  m*/
    for (ParameterMapping mapping : boundSql.getParameterMappings()) {
        String prop = mapping.getProperty();
        if (boundSql.hasAdditionalParameter(prop)) {
            newBoundSql.setAdditionalParameter(prop, boundSql.getAdditionalParameter(prop));
        }
    }
    return newBoundSql;
}

From source file:plum.mybatis.SQLHelp.java

License:Apache License

/**
 * /*w  w  w.  j  av a  2s  . c  om*/
 *
 * @param sql             SQL?
 * @param connection      ?
 * @param mappedStatement mapped
 * @param parameterObject ?
 * @param boundSql        boundSql
 * @param dialect         database dialect
 * @return 
 * @throws java.sql.SQLException sql
 */
public static int getCount(final String sql, final Connection connection, final MappedStatement mappedStatement,
        final Object parameterObject, final BoundSql boundSql, Dialect dialect) throws SQLException {
    final String count_sql = dialect.getCountString(sql);
    if (LOG.isDebugEnabled()) {
        LOG.debug("count sql:" + count_sql);
    }
    PreparedStatement countStmt = null;
    ResultSet rs = null;
    try {
        countStmt = connection.prepareStatement(count_sql);
        final BoundSql countBS = new BoundSql(mappedStatement.getConfiguration(), count_sql,
                boundSql.getParameterMappings(), parameterObject);
        SQLHelp.setParameters(countStmt, mappedStatement, countBS, parameterObject);
        rs = countStmt.executeQuery();
        int count = 0;
        if (rs.next()) {
            count = rs.getInt(1);
        }
        return count;
    } finally {
        if (rs != null) {
            rs.close();
        }
        if (countStmt != null) {
            countStmt.close();
        }
    }
}