我有一個很多方法的DAO,每個方法都包含一個要執行的SQL語句。我不想將SQL字符串硬編碼到DAO Java類中,那麼管理此場景的最佳方式是什麼?我正在考慮注射他們,但如何最好地做到這一點?Spring的SimpleJdbcTemplate和加載SQL腳本
乾杯, 馬特
我有一個很多方法的DAO,每個方法都包含一個要執行的SQL語句。我不想將SQL字符串硬編碼到DAO Java類中,那麼管理此場景的最佳方式是什麼?我正在考慮注射他們,但如何最好地做到這一點?Spring的SimpleJdbcTemplate和加載SQL腳本
乾杯, 馬特
你可以注入應用程序初始化期間你的SQL語句。
class MyDAO {
private String someQuery;
public void setSomeQuery(String someQuery) {
this.someQuery = someQuery;
}
}
然後,你可以讓你的SQL語句在XML文件中,而不是硬編碼。
<bean class="some.package.MyDAO">
<property name="someQuery">
<value>
SELECT * FROM user WHERE id = ?
</value>
</property>
</bean>
你甚至可以將你的SQL語句外部化爲.properties
文件。
請看:http://www.summa-tech.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring/
+1真的很好的答案。順便說一句...你forgott setSomeQuery的返回類型。 –
謝謝。堆棧溢出就像維基百科:-)你可以自己糾正我的錯誤:)現在它是固定的。 –
爲什麼你不希望把SQL的DAO - 這是最合乎邏輯的地方,還有誰的人都需要它?如果可以看到查詢,它使得JDBC代碼更容易閱讀。 –
我同意,但當我可以從文件加載並注入代碼時,將大量的SQL放入代碼中感覺不對,這會使DBA更輕鬆地對SQL進行小調整。 – Matt
我不希望DBA對業務邏輯有任何輸入,這就是您在DAO中編寫的內容,所以我沒有在那裏看到衝突。如果你想將字符串外化,有很多選擇,但我不同意這是錯誤的。 –