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();
}