List of usage examples for org.apache.ibatis.executor.statement StatementHandler getBoundSql
BoundSql getBoundSql();
From source file:cn.com.bricks.mybatis.rbac.DynamicRbacInterceptor.java
@Override public Object intercept(Invocation invocation) throws Throwable { StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY); MappedStatement mappedStatement = (MappedStatement) metaStatementHandler .getValue("delegate.mappedStatement"); // ?sql/*from w w w .j av a 2 s . c o m*/ BoundSql bsql = statementHandler.getBoundSql(); // ?sql TextSqlNode sqlNode = new TextSqlNode(bsql.getSql()); BoundSql nbsql = getBoundSql(mappedStatement.getConfiguration(), bsql.getParameterObject(), sqlNode); // ?sql? metaStatementHandler.setValue("delegate.boundSql.sql", nbsql.getSql()); return invocation.proceed(); }
From source file:com.hj.blog.common.orm.PageInterceptor.java
License:Apache License
@Override public Object intercept(Invocation invocation) throws Throwable { if (invocation.getTarget() instanceof RoutingStatementHandler) { RoutingStatementHandler statementHandler = (RoutingStatementHandler) invocation.getTarget(); StatementHandler delegate = (StatementHandler) ReflectUtils.getFieldValue(statementHandler, "delegate"); BoundSql boundSql = delegate.getBoundSql(); Object parameterObject = boundSql.getParameterObject(); if (!(parameterObject instanceof MapperMethod.ParamMap)) { return invocation.proceed(); }/*from w w w. j a v a2 s . c om*/ MapperMethod.ParamMap paramMap = (MapperMethod.ParamMap) parameterObject; if (!paramMap.containsKey(PAGE_PARAM_NAME)) { return invocation.proceed(); } Object pageObject = paramMap.get(PAGE_PARAM_NAME); dataThreadLocal.set(pageObject); if (pageObject instanceof DigitalPage) { DigitalPage page = (DigitalPage) pageObject; MappedStatement mappedStatement = (MappedStatement) ReflectUtils.getFieldValue(delegate, "mappedStatement"); Connection connection = (Connection) invocation.getArgs()[0]; String sql = boundSql.getSql(); setTotalCount(page, parameterObject, mappedStatement, connection); ReflectUtils.setFieldValue(boundSql, "sql", getDigitalPageSql(page, sql)); } else if (pageObject instanceof DropDownPage) { DropDownPage page = (DropDownPage) pageObject; String sql = boundSql.getSql(); ReflectUtils.setFieldValue(boundSql, "sql", getDropDownPageSql(page, sql)); } return invocation.proceed(); } else if (invocation.getTarget() instanceof ResultSetHandler) { Object parameterObject = dataThreadLocal.get(); dataThreadLocal.remove(); Object data = invocation.proceed(); if (parameterObject == null) { return data; } if (!(parameterObject instanceof DigitalPage) && !(parameterObject instanceof DropDownPage)) { return data; } Class<?> clazz = parameterObject.getClass(); ReflectUtils.setFieldValueWithSetterMethod(parameterObject, data, clazz, clazz.getDeclaredField("data")); if (parameterObject instanceof DropDownPage) { List<?> dataList = (List<?>) data; if (!CollectionUtils.isEmpty(dataList)) { String[] orderColumnArray = ((DropDownPage) parameterObject).getOrderColumn().split(","); String orderColumn = orderColumnArray[orderColumnArray.length - 1]; String[] orderColumnNameArray = orderColumn.split("_"); StringBuffer stringBuffer = new StringBuffer(orderColumnNameArray[0].toLowerCase()); for (int i = 1; i < orderColumnNameArray.length; i++) { stringBuffer.append(orderColumnNameArray[i].substring(0, 1).toUpperCase()); if (orderColumnNameArray[i].length() > 1) { stringBuffer.append(orderColumnNameArray[i].substring(1)); } } Object offset = ReflectUtils.getFieldValue(dataList.get(dataList.size() - 1), stringBuffer.toString()); if (ObjectUtils.isNull(offset)) { throw new RuntimeException( "please check the property name of " + orderColumn + " is right."); } ReflectUtils.setFieldValueWithSetterMethod(parameterObject, offset, clazz, clazz.getDeclaredField("offset")); } } return data; } return invocation.proceed(); }
From source file:com.huang.rp.common.persistence.PageInterceptor.java
License:Apache License
/** * ??//from ww w . j a va2 s . c o m */ @SuppressWarnings({ "rawtypes", "unchecked", "unused" }) @Override public Object intercept(Invocation invocation) throws Throwable { RoutingStatementHandler handler = (RoutingStatementHandler) invocation.getTarget(); StatementHandler delegate = (StatementHandler) ReflectionUtils.getFieldValue(handler, "delegate"); BoundSql boundSql = delegate.getBoundSql(); Object obj = boundSql.getParameterObject(); String sqls = boundSql.getSql(); if (obj instanceof QueryFilter) { QueryFilter queryFilter = (QueryFilter) obj; MappedStatement mappedStatement = (MappedStatement) ReflectionUtils.getFieldValue(delegate, "mappedStatement"); Connection connection = (Connection) invocation.getArgs()[0]; String sql = boundSql.getSql(); this.setTotalRecord(queryFilter, mappedStatement, connection); String pageSql = this.getPageSql(queryFilter, sql); ReflectionUtils.setFieldValue(boundSql, "sql", pageSql); QueryFilter.setLocal(queryFilter); } return invocation.proceed(); }
From source file:com.luxoft.mybatis.splitter.ReusingBatchExecutor.java
License:Apache License
public int doUpdate(MappedStatement ms, Object parameterObject) throws SQLException { final Configuration configuration = ms.getConfiguration(); final StatementHandler handler = configuration.newStatementHandler(this, ms, parameterObject, RowBounds.DEFAULT, null, null); final BoundSql boundSql = handler.getBoundSql(); PreparedStatementKey key = new PreparedStatementKey(boundSql.getSql(), ms); StatementData statementData = statementsData.get(key); if (retainExecuteOrder && statementData != null && !key.equals(lastKey)) { statementData = null;/* w w w.jav a 2 s . c o m*/ executeUpTo(key, true); } if (statementData == null) { statementData = unusedStatementData.remove(key); if (statementData == null) { Connection connection = getConnection(ms.getStatementLog()); Statement stmt = handler.prepare(connection); statementData = new StatementData(stmt); } statementsData.put(key, statementData); } lastKey = key; statementData.addParameterObject(parameterObject); handler.parameterize(statementData.getStatement()); handler.batch(statementData.getStatement()); return BATCH_UPDATE_RETURN_VALUE; }
From source file:com.luxoft.mybatis.splitter.UpdateSplitterPlugin.java
License:Apache License
@Override public Object intercept(Invocation invocation) throws Throwable { MappedStatement ms = (MappedStatement) invocation.getArgs()[0]; Object parameterObject = invocation.getArgs()[1]; final Configuration configuration = ms.getConfiguration(); final StatementHandler handler = configuration.newStatementHandler((Executor) invocation.getTarget(), ms, parameterObject, RowBounds.DEFAULT, null, null); final BoundSql boundSql = handler.getBoundSql(); final String sql = boundSql.getSql(); List<String> splitted = splitter.split(sql); int rc = 0;/*from w w w . ja v a 2s . co m*/ List<ParameterMapping> fullParameterMappings = new ArrayList<ParameterMapping>( boundSql.getParameterMappings()); for (String sqlPart : splitted) { if (skipEmptyStatements && sqlPart.length() == 0) { continue; } int numParams = 0; for (int index = sqlPart.indexOf('?'); index >= 0; index = sqlPart.indexOf('?', index + 1)) { numParams++; } MappedStatement subStatement = subStatements.get(ms); if (subStatement == null) { subStatement = new MappedStatement.Builder(ms.getConfiguration(), ms.getId(), new SwitchingSqlSource(configuration), ms.getSqlCommandType()).cache(ms.getCache()) .databaseId(ms.getDatabaseId()).fetchSize(ms.getFetchSize()) .timeout(ms.getTimeout()).flushCacheRequired(ms.isFlushCacheRequired()) .useCache(ms.isUseCache()).build(); subStatements.put(ms, subStatement); } List<ParameterMapping> subParameterMappings = fullParameterMappings.subList(0, numParams); ((SwitchingSqlSource) subStatement.getSqlSource()).switchParams(sqlPart, boundSql, new ArrayList<ParameterMapping>(subParameterMappings)); subParameterMappings.clear(); int subRc = (Integer) invocation.getMethod().invoke(invocation.getTarget(), subStatement, parameterObject); if (rc >= 0) { rc = subRc < 0 ? subRc : rc + subRc; } } return rc; }
From source file:core.plugin.mybatis.PageInterceptor.java
License:Apache License
@Override public Object intercept(Invocation inv) throws Throwable { // prepare?Connection Connection connection = (Connection) inv.getArgs()[0]; String dbType = connection.getMetaData().getDatabaseProductName(); L.debug(dbType);// ww w. j ava 2 s. c o m Dialect dialect = null; if (StringUtils.equalsIgnoreCase("ORACLE", dbType)) { dialect = new OracleDialect(); } else if (StringUtils.equalsIgnoreCase("H2", dbType)) { dialect = new H2Dialect(); } else { throw new AppRuntimeException("A404: Not Support ['" + dbType + "'] Pagination Yet!"); } StatementHandler target = (StatementHandler) inv.getTarget(); BoundSql boundSql = target.getBoundSql(); String sql = boundSql.getSql(); if (StringUtils.isBlank(sql)) { return inv.proceed(); } // ?select?? if (sql.matches(SQL_SELECT_REGEX) && !Pattern.matches(SQL_COUNT_REGEX, sql)) { Object obj = FieldUtils.readField(target, "delegate", true); // ??? RowBounds RowBounds rowBounds = (RowBounds) FieldUtils.readField(obj, "rowBounds", true); // ??SQL if (rowBounds != null && rowBounds != RowBounds.DEFAULT) { FieldUtils.writeField(boundSql, "sql", dialect.getSqlWithPagination(sql, rowBounds), true); // ???(?) FieldUtils.writeField(rowBounds, "offset", RowBounds.NO_ROW_OFFSET, true); FieldUtils.writeField(rowBounds, "limit", RowBounds.NO_ROW_LIMIT, true); } } return inv.proceed(); }
From source file:org.hswebframework.web.dao.mybatis.plgins.pager.PagerInterceptor.java
License:Apache License
@Override public Object plugin(Object target) { if (target instanceof StatementHandler) { StatementHandler statementHandler = (StatementHandler) target; MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler); String sql = statementHandler.getBoundSql().getSql(); Pager pager = Pager.getAndReset(); String newSql = sql;/*from w ww . j av a 2 s .c om*/ if (sql.trim().toLowerCase().startsWith("select")) { if (pager != null) { newSql = EasyOrmSqlBuilder.getInstance().getActiveDatabase().getDialect().doPaging(sql, pager.pageIndex(), pager.pageSize()); } Object queryEntity = statementHandler.getParameterHandler().getParameterObject(); if (queryEntity instanceof QueryParam && ((QueryParam) queryEntity).isForUpdate()) { newSql = newSql + " for update"; } metaStatementHandler.setValue("delegate.boundSql.sql", newSql); } } return Plugin.wrap(target, this); }
From source file:org.nebula.service.dao.PaginationInterceptor.java
License:Apache License
public Object intercept(Invocation inv) throws Throwable { StatementHandler target = (StatementHandler) inv.getTarget(); BoundSql boundSql = target.getBoundSql(); String sql = boundSql.getSql(); if (StringUtils.isBlank(sql)) { return inv.proceed(); }// w w w. j a v a 2 s. c o m logger.debug("origin sql>>>>>" + sql.replaceAll("\n", "")); // ?select?? if (sql.matches(SQL_SELECT_REGEX) && !Pattern.matches(SQL_COUNT_REGEX, sql)) { Object obj = FieldUtils.readField(target, "delegate", true); // ??? RowBounds RowBounds rowBounds = (RowBounds) FieldUtils.readField(obj, "rowBounds", true); // ??SQL if (rowBounds != null && rowBounds != RowBounds.DEFAULT) { FieldUtils.writeField(boundSql, "sql", newSql(sql, rowBounds), true); logger.debug("new sql>>>>>" + boundSql.getSql().replaceAll("\n", "")); // ???(?) FieldUtils.writeField(rowBounds, "offset", RowBounds.NO_ROW_OFFSET, true); FieldUtils.writeField(rowBounds, "limit", RowBounds.NO_ROW_LIMIT, true); } } return inv.proceed(); }