我想使数据库的名称可配置。我将数据库名称放在config.properties中,并尝试在Dao中通过@Value。但它不起作用。
是否可以通过@Value向Dao注入价值?
@Repository
public interface PageReportDao {
@Value("${database.name}")
String DATABASE = "0";
/**
* 获取页面最大面板
* @param pageId
* @return
*/
@Select("SELECT page_id FROM " + DATABASE + ".table WHERE page_id=#{page_id}")
String getPageInfo(@Param("page_id") int pageId);
}
答案 0 :(得分:1)
您不能像这样注入值。首先,接口中的每个字段都是隐式最终的,因此甚至不会编译
即使你可以注入值,@Select
的参数应该是一个常量表达式,所以这不起作用。
然而,有一种方法可以通过使用全局参数来实现您想要的效果。您首先在SqlSessionFactory
:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configurationProperties">
<props>
<prop key="database">${database.name}</prop>
</props>
</property>
</bean>
然后在映射器中使用它:
@Repository
public interface PageReportDao {
@Select("SELECT page_id FROM ${database}.table WHERE page_id=#{page_id}")
String getPageInfo(@Param("page_id") int pageId);
}
在这种情况下,mybatis本身将扩展该变量。