如何使用@Value为Dao注入一个值?

时间:2018-04-19 13:39:50

标签: spring annotations mybatis

我想使数据库的名称可配置。我将数据库名称放在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);
}

1 个答案:

答案 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本身将扩展该变量。