@Override public void replace(Connection connection, MetaObject metaObject, MappedStatement mappedStatement, BoundSql boundSql) { providers.forEach(p -> p.replace(connection, metaObject, mappedStatement, boundSql)); } }
@Override public void replace(Connection connection, MetaObject metaObject, MappedStatement mappedStatement, BoundSql boundSql) { SqlProvider provider = this.provider; if (provider == null || configuration.isMultipleDatasource()) { try { String databaseName = connection.getMetaData().getDatabaseProductName(); this.provider = provider = providerMap.get(databaseName); } catch (SQLException e) { throw new RuntimeException(e); } } if (provider != null) { provider.replace(connection, metaObject, mappedStatement, boundSql); } } }
@Override public Object intercept(Invocation invocation) throws Throwable { Connection connection = (Connection) invocation.getArgs()[0]; MetaObject metaObject = MyBatisUtils.getRealMetaObject(invocation.getTarget()); MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement"); BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql"); preprocessors.forEach(p -> p.replace(connection, metaObject, mappedStatement, boundSql)); providers.forEach(p -> p.replace(connection, metaObject, mappedStatement, boundSql)); return invocation.proceed(); }
@Override public void replace(Connection connection, MetaObject metaObject, MappedStatement mappedStatement, BoundSql boundSql) { if (Objects.equals(boundSql.getSql(), SqlProvider.MYBATIS_BOOST)) { Class<?> providerType = (Class<?>) SystemMetaObject.forObject(mappedStatement.getSqlSource()).getValue("providerType"); SqlProvider provider = providerMap.get(providerType); if (provider == null) { synchronized (providerType) { provider = providerMap.computeIfAbsent(providerType, UncheckedFunction.of(k -> { SqlProvider p = (SqlProvider) providerType.newInstance(); if (p instanceof ConfigurationAware) { ((ConfigurationAware) p).setConfiguration(configuration); } return p; })); } } if (provider != null) { provider.replace(connection, metaObject, mappedStatement, boundSql); } } } }