Bos*_*one 8 java parameters global mybatis
首先是问题:我使用XML定义的查询,SQL包含数据库名称作为表名的一部分.例如:SELECT * from mydb.bar.不幸的是,数据库是在所有地方创建/命名的,mudb部分是非常动态的,可以随时改变.所以我想用一个属性替换它,所以它看起来像SELECT * FROM ${dbname}.bar然后我在mybatis-config.xml中定义了以下部分:
<properties>
<property name="dbname" value="mydb"/>
</properties>
Run Code Online (Sandbox Code Playgroud)
但是当我运行查询时,${dbname}计算结果为null.如果我在属性文件中定义此属性,也会发生相同的情况 我不想将此作为每个调用参数的一部分传递,因为这是一个真正的全局属性.可以这样做吗?如果是 - 怎么样?
是的你可以!这可能是一种奇怪的无证特征.构建Configuration对象时,请执行以下操作.(org.apache.ibatis.session.Configuration)
configuration.getVariables().put("global_param", "123");
Run Code Online (Sandbox Code Playgroud)
然后在XML地图中,您可以参考.
select * from ${global_param}
Run Code Online (Sandbox Code Playgroud)
我在使用 Spring+MyBatis 时遇到了同样的问题,并通过使用我的 sqlSessionFactory 的 Spring XML 定义设置“configurationProperties”来解决它。我下面的示例显示了如何设置名为“encryptionKey”的自定义全局属性,您可以使用该值在 XML 文件中进行硬编码,也可以使用 context:property-placeholder 标记(如下所示)从外部文件加载。
<context:property-placeholder location="/WEB-INF/spring/config-datasource.properties" />
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="typeAliasesPackage" value="com.example.model" />
<beans:property name="configurationProperties">
<beans:props>
<beans:prop key="encryptionKey">${jdbc.encryptionKey}</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)