使用Java配置将sql / hql注入spring bean

时间:2019-04-13 10:12:24

标签: java spring

我有DAO

@Service
class MyDAO{
   private String hqlQuery;
   public List<String> getSomethingFromDB(){
      hibernate.doSomething(hqlQuery);
   }
}

我想将hql查询的定义保留在单独的文件中。如果我使用xml初始化了这个bean,我可以这样做:

  <bean id="daoBEAN" class="myDAO">
     <property name="hqlQuery">
         <value><![CDATA[ some hql query  ]]></value>
     </property>
  </bean>

但是我如何使用Java配置而不是XML配置来实现类似的目的?

感谢帮助!

2 个答案:

答案 0 :(得分:0)

Java配置意味着您只能通过Java代码(主要带有注释)来配置应用程序。使用外部文件为字段设置值与配置类型(基于xml或基于Java)无关。

最简单的解决方案是将查询从属性文件绑定到您的字段。

@Repository
class MyDAO{

   @Value("${db-queries.get-persons}")
   private String sqlQuery;
   public List<Strin> getSomethingFromDB(){
      hibernate.doSomething(sqlQuery);
   }
}

和您的 application.properties

db-queries.get-persons: SELECT * FROM PERSONS

或者您可以使用 application.yml

db-queries:
  get-persons: SELECT * FROM PERSONS

请注意,我在您的代码中更改了一些错字,并为sql查询创建了示例,但即使在hql中也可以使用。

答案 1 :(得分:0)

您可以创建配置文件(.properties)并进行所有hql查询。 让您拥有application.properties并创建所有以名称hsql开头的属性。

  hsql.insertuser=<some queries>

现在创建可读取所有属性的java类。

@Component
@ConfigurationProperties("hsql")
public class AppProperties {

   private String insertUser;

  public String getInsertUser(){
    return this.insertUser;
  }

还有您的DAO类,

@Service
class myDAO{

@Autowired
 AppProperties myAppProperties;

   public List<Strin> getSomethingFromDB(){
      hibernate.doSomething(myAppProperties.getInsertUser());
   }
}

更新:如果您要为查询使用单独的属性文件,

@Component
@PropertySource("classpath:hsql.properties") 
@ConfigurationProperties
public class AppProperties {

   private String insertUser;

  public String getInsertUser(){
    return this.insertUser;
  }

您的hsql.properties

insertuser=<some queries>
相关问题