List of usage examples for org.apache.ibatis.mapping BoundSql getParameterMappings
public List<ParameterMapping> getParameterMappings()
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(); } } }