List of usage examples for org.apache.ibatis.mapping BoundSql getParameterObject
public Object getParameterObject()
From source file:com.wbsf.core.mybatis.mook.locker.interceptor.OptimisticLocker.java
License:Open Source License
@Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Object intercept(Invocation invocation) throws Exception { String versionColumn;/*from w ww . j av a2 s . 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 routingHandler = (StatementHandler) PluginUtil.processTarget(invocation.getTarget()); MetaObject routingMeta = SystemMetaObject.forObject(routingHandler); MetaObject hm = routingMeta.metaObjectForProperty("delegate"); VersionLocker vl = VersionLockerResolver.resolve(hm); if (null != vl && !vl.value()) { return invocation.proceed(); } String originalSql = (String) hm.getValue("boundSql.sql"); StringBuilder builder = new StringBuilder(originalSql); builder.append(" AND "); builder.append(versionColumn); builder.append(" = ?"); hm.setValue("boundSql.sql", builder.toString()); } else if ("setParameters".equals(interceptMethod)) { ParameterHandler handler = (ParameterHandler) PluginUtil.processTarget(invocation.getTarget()); MetaObject hm = SystemMetaObject.forObject(handler); VersionLocker vl = VersionLockerResolver.resolve(hm); if (null != vl && !vl.value()) { return invocation.proceed(); } BoundSql boundSql = (BoundSql) hm.getValue("boundSql"); Object parameterObject = boundSql.getParameterObject(); if (parameterObject instanceof MapperMethod.ParamMap<?>) { MapperMethod.ParamMap<?> paramMap = (MapperMethod.ParamMap<?>) parameterObject; if (!paramMap.containsKey(versionColumn)) { throw new TypeException( "All the primitive type parameters must add MyBatis's @Param Annotaion"); } } Configuration configuration = ((MappedStatement) hm.getValue("mappedStatement")).getConfiguration(); MetaObject pm = configuration.newMetaObject(parameterObject); Object value = pm.getValue(versionColumn); ParameterMapping versionMapping = new ParameterMapping.Builder(configuration, versionColumn, Object.class).build(); TypeHandler typeHandler = versionMapping.getTypeHandler(); JdbcType jdbcType = versionMapping.getJdbcType(); if (value == null && jdbcType == null) { jdbcType = configuration.getJdbcTypeForNull(); } int versionLocation = boundSql.getParameterMappings().size() + 1; try { PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0]; typeHandler.setParameter(ps, versionLocation, value, jdbcType); } catch (TypeException | SQLException e) { throw new TypeException("set parameter 'version' faild, Cause: " + e, e); } if (value.getClass() != Long.class && value.getClass() != long.class) { if (log.isDebugEnabled()) { log.error(Constent.LogPrefix + "property type error, the type of version property must be Long or long."); } } // increase version pm.setValue(versionColumn, (long) value + 1); } return invocation.proceed(); }
From source file:com.wbsf.core.mybatis.mook.locker.interceptor.VersionLockerResolver.java
License:Open Source License
static VersionLocker resolve(MetaObject mo) { // if the method is not a 'update', return false MappedStatement ms = (MappedStatement) mo.getValue("mappedStatement"); if (ms.getSqlCommandType() != SqlCommandType.UPDATE) return falseLocker; BoundSql boundSql = (BoundSql) mo.getValue("boundSql"); Object paramObj = boundSql.getParameterObject(); Class<?>[] paramCls = null; /******************Process param must order by below ***********************/ // 1?Process @Param param if (paramObj instanceof MapperMethod.ParamMap<?>) { MapperMethod.ParamMap<?> mmp = (MapperMethod.ParamMap<?>) paramObj; if (null != mmp && !mmp.isEmpty()) { paramCls = new Class<?>[mmp.size() >> 1]; int mmpLen = mmp.size() >> 1; for (int i = 0; i < mmpLen; i++) { Object index = mmp.get("param" + (i + 1)); paramCls[i] = index.getClass(); }/* w w w . ja v a 2 s .com*/ } // 2?Process Map param } else if (paramObj instanceof Map) { paramCls = new Class<?>[] { Map.class }; // 3?Process POJO entity param } else { paramCls = new Class<?>[] { paramObj.getClass() }; } String id = ms.getId(); Cache.MethodSignature vm = new Cache.MethodSignature(id, paramCls); VersionLocker versionLocker = versionLockerCache.getVersionLocker(vm); if (null != versionLocker) return versionLocker; if (null == mapperMap || mapperMap.isEmpty()) { Collection<Class<?>> mappers = ms.getConfiguration().getMapperRegistry().getMappers(); if (null != mappers && !mappers.isEmpty()) { for (Class<?> me : mappers) { mapperMap.put(me.getName(), me); } } } int pos = id.lastIndexOf("."); String nameSpace = id.substring(0, pos); if (!mapperMap.containsKey(nameSpace)) { if (log.isDebugEnabled()) { log.debug(Constent.LogPrefix + "Config info error, maybe you have not config the Mapper interface"); throw new RuntimeException("Config info error, maybe you have not config the Mapper interface"); } } Class<?> mapper = mapperMap.get(nameSpace); Method m; try { m = mapper.getMethod(id.substring(pos + 1), paramCls); } catch (NoSuchMethodException | SecurityException e) { throw new RuntimeException("The Map type param error." + e, e); } versionLocker = m.getAnnotation(VersionLocker.class); if (null == versionLocker) { //???? versionLocker = falseLocker; } if (!versionLockerCache.containMethodSignature(vm)) { versionLockerCache.cacheMethod(vm, versionLocker); } return versionLocker; }
From source file:com.wsun.seap.dao.interceptor.PaginationInterceptor.java
License:Open Source License
@Override public Object intercept(Invocation invocation) throws Throwable { // ??/*from w ww . ja v a 2 s .co m*/ final MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[MAPPED_STATEMENT_INDEX]; // ?SQL // ?? Object parameterObj = invocation.getArgs()[PARAMETER_INDEX]; // ??QueryParam Object parameter; if (parameterObj instanceof QueryParam) { // ?QueryParam,??Map parameter = ((QueryParam) parameterObj).getAllParam(); invocation.getArgs()[PARAMETER_INDEX] = parameter; } else { parameter = parameterObj; } BoundSql boundSql = mappedStatement.getBoundSql(parameter); if (StringUtils.isBlank(boundSql.getSql())) { return null; } // ??RowBounds RowBounds rowBounds = (RowBounds) invocation.getArgs()[ROWBOUNDS_INDEX]; // if (rowBounds != null && rowBounds != RowBounds.DEFAULT) { String originalSql = boundSql.getSql().trim(); // ??sql String pageSql = dialect.getLimitString(originalSql, rowBounds.getOffset(), rowBounds.getLimit()); invocation.getArgs()[ROWBOUNDS_INDEX] = new RowBounds(RowBounds.NO_ROW_OFFSET, RowBounds.NO_ROW_LIMIT); BoundSql newBoundSql = new BoundSql(mappedStatement.getConfiguration(), pageSql, boundSql.getParameterMappings(), boundSql.getParameterObject()); MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql)); invocation.getArgs()[MAPPED_STATEMENT_INDEX] = newMs; } return invocation.proceed(); }
From source file:com.wsun.seap.dao.persistence.interceptor.PreparePaginationInterceptor.java
License:Open Source License
@Override public Object intercept(Invocation ivk) throws Throwable { if (ivk.getTarget().getClass().isAssignableFrom(RoutingStatementHandler.class)) { final RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk.getTarget(); final BaseStatementHandler delegate = (BaseStatementHandler) ReflectionsUtil .getFieldValue(statementHandler, DELEGATE); final MappedStatement mappedStatement = (MappedStatement) ReflectionsUtil.getFieldValue(delegate, MAPPED_STATEMENT);//from ww w. j ava 2s. c om BoundSql boundSql = delegate.getBoundSql(); //SQL<select>parameterType??Mapper??,?? Object parameterObject = boundSql.getParameterObject(); if (parameterObject == null) { log.error("?"); throw new NullPointerException("parameterObject?"); } else { final Connection connection = (Connection) ivk.getArgs()[MAPPED_STATEMENT_INDEX]; final String sql = boundSql.getSql(); // } if (boundSql.getSql() == null || "".equals(boundSql.getSql())) { return null; } } return ivk.proceed(); }
From source file:com.zrx.authority.dao.plugin.PagePlugin.java
public Object intercept(Invocation ivk) throws Throwable { // TODO Auto-generated method stub if (ivk.getTarget() instanceof RoutingStatementHandler) { RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk.getTarget(); BaseStatementHandler delegate = (BaseStatementHandler) ReflectHelper .getValueByFieldName(statementHandler, "delegate"); MappedStatement mappedStatement = (MappedStatement) ReflectHelper.getValueByFieldName(delegate, "mappedStatement"); if (mappedStatement.getId().matches(pageSqlId)) { //?SQL BoundSql boundSql = delegate.getBoundSql(); Object parameterObject = boundSql.getParameterObject();//SQL<select>parameterType??Mapper??,?? if (parameterObject == null) { throw new NullPointerException("parameterObject?"); } else { Connection connection = (Connection) ivk.getArgs()[0]; String sql = boundSql.getSql(); //String countSql = "select count(0) from (" + sql+ ") as tmp_count"; // String countSql = "select count(0) from (" + sql + ") tmp_count"; // == oracle as (SQL command not properly ended) PreparedStatement countStmt = connection.prepareStatement(countSql); BoundSql countBS = new BoundSql(mappedStatement.getConfiguration(), countSql, boundSql.getParameterMappings(), parameterObject); setParameters(countStmt, mappedStatement, countBS, parameterObject); ResultSet rs = countStmt.executeQuery(); int count = 0; if (rs.next()) { count = rs.getInt(1); }/*w ww.j av a 2 s. c o m*/ rs.close(); countStmt.close(); //System.out.println(count); Page page = null; if (parameterObject instanceof Page) { //?Page page = (Page) parameterObject; page.setEntityOrField(true); //?com.jalan.entity.Page.entityOrField page.setTotalResult(count); } else { //??Page Field pageField = ReflectHelper.getFieldByFieldName(parameterObject, "page"); if (pageField != null) { page = (Page) ReflectHelper.getValueByFieldName(parameterObject, "page"); if (page == null) page = new Page(); page.setEntityOrField(false); //?com.jalan.entity.Page.entityOrField page.setTotalResult(count); ReflectHelper.setValueByFieldName(parameterObject, "page", page); //?? } else { throw new NoSuchFieldException( parameterObject.getClass().getName() + "? page ?"); } } String pageSql = generatePageSql(sql, page); ReflectHelper.setValueByFieldName(boundSql, "sql", pageSql); //sql???BoundSql. } } } return ivk.proceed(); }
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 {//from www .ja v a 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.apache.playframework.mybatisplus.plugins.PaginationInterceptor.java
License:Apache License
/** * ?// w w w . jav a 2s. c o m * * @param sql * @param connection * @param mappedStatement * @param boundSql * @param page */ public Pagination count(String sql, Connection connection, MappedStatement mappedStatement, BoundSql boundSql, Pagination page) { PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = connection.prepareStatement(sql); DefaultParameterHandler parameterHandler = new MybatisDefaultParameterHandler(mappedStatement, boundSql.getParameterObject(), boundSql); parameterHandler.setParameters(pstmt); rs = pstmt.executeQuery(); int total = 0; if (rs.next()) { total = rs.getInt(1); } page.setTotal(total); /* * */ if (overflowCurrent && (page.getCurrent() > page.getPages())) { page = new Pagination(1, page.getSize()); page.setTotal(total); } } catch (Exception e) { // ignored } finally { IOUtils.closeQuietly(pstmt, rs); } return page; }
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 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.njqspringboot.support.mybatis.locker.interceptor.OptimisticLocker.java
License:Open Source License
@Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Object intercept(Invocation invocation) throws Exception { String versionColumn;// w w w. j ava 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(); }