Spring &schema2)编辑:我可能会混淆模式和目录,但这仍然是我试图解决的问题这只会在启动时发生,对吗?是否可以根据每个请求修改脚本?我想根据设置架构request@aldo这只是一次。如果您需要按照每个请求执行,那么您可能需要编写自己的mybatus查询截取

Spring &schema2)编辑:我可能会混淆模式和目录,但这仍然是我试图解决的问题这只会在启动时发生,对吗?是否可以根据每个请求修改脚本?我想根据设置架构request@aldo这只是一次。如果您需要按照每个请求执行,那么您可能需要编写自己的mybatus查询截取,spring,ibatis,mybatis,Spring,Ibatis,Mybatis,&schema2)编辑:我可能会混淆模式和目录,但这仍然是我试图解决的问题这只会在启动时发生,对吗?是否可以根据每个请求修改脚本?我想根据设置架构request@aldo这只是一次。如果您需要按照每个请求执行,那么您可能需要编写自己的mybatus查询截取程序。这只会在启动时发生,对吗?是否可以根据每个请求修改脚本?我想根据设置架构request@aldo这只是一次。如果您需要按每个请求执行,您可能需要编写自己的mybatus查询拦截器 <!-- define the SqlSession


&schema2)编辑:我可能会混淆模式和目录,但这仍然是我试图解决的问题这只会在启动时发生,对吗?是否可以根据每个请求修改脚本?我想根据设置架构request@aldo这只是一次。如果您需要按照每个请求执行,那么您可能需要编写自己的mybatus查询截取程序。这只会在启动时发生,对吗?是否可以根据每个请求修改脚本?我想根据设置架构request@aldo这只是一次。如果您需要按每个请求执行,您可能需要编写自己的mybatus查询拦截器
<!-- define the SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="com.example.domain" />
    <property name="configLocation" value="classpath:mybatisConfig.xml" />
</bean>

<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.something.persistence" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="sqlmapconfig.properties" />
</configuration>
schema1=schema1_test
 <select id="test" resultType="result" parameterType="long">
    select ${schema1}.table.col  
    from ${schema1}.table 
 </select>
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'schema1' in 'class java.lang.Long'
<select id="test" resultType="result" parameterType="map">
    select ${schema1}.table.col  
    from ${schema1}.table where number=#{number}
</select>
import org.apache.ibatis.annotations.Param;

...

public List<result> test(@Param("number") long number, @Param("schema1") String schema1);
public interface MyMabatisMapper {
  @Select("select * from " + SCHEMA_MARKER + ".myTable ")
  List<MyObjects> getObjects();
}
public class QueriesModifyingDriver extends XMLLanguageDriver {

  public static final String SCHEMA_MARKER = "###MY_SCHEMA###";
  public static final String SCHEMA_MARKER_PATTERN = SCHEMA.replaceAll("#", "\\#");

  private final String schemaName;

  // NOTE: Name of the schema passed in constructor !!!
  public QueriesModifyingDriver(String schemaName) {
    this.schemaName = schemaName;
  }

  @Override
  public SqlSource createSqlSource(org.apache.ibatis.session.Configuration configuration, String script, Class<?> parameterType) { 
    String modifiedScript = script.replaceAll(SCHEMA_MARKER_PATTERN, schemaName);

    return super.createSqlSource(configuration, modifiedScript, parameterType);
  }
};
  @Bean
  public SqlSessionFactory mybatisSqlSessionFactory(DataSource dataSource, @Value("${my.schema.name}") String schemaName) throws Exception {

    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(dataSource);

    org.apache.ibatis.session.Configuration mybatisConfiguration = sqlSessionFactoryBean.getObject().getConfiguration();

    QueriesModifyingDriver queriesModifyingDriver = new QueriesModifyingDriver(schemaName);
    mybatisConfiguration.getLanguageRegistry().register(queriesModifyingDriver);

    mybatisConfiguration.setDefaultScriptingLanguage(QueriesModifyingDriver.class);

    return sqlSessionFactoryBean.getObject();
  }