我有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配置来实现类似的目的?
感谢帮助!
答案 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>