我正在使用項目的Spring Boot。我的DAO使用JdbcNamedTemplates來訪問數據。我在我的daos中編寫查詢,然後在運行時映射一些參數以獲取正確的數據。在Spring應用程序中使用JDBCTemplate處理不同的表名
現在,我必須根據請求處理從多個相同表中檢索數據。檢索邏輯是相同的,除了我需要使用不同的表名稱。 JdbcTemplate不允許使用表名作爲參數。我不想使用字符串格式,因爲我希望我的查詢是最終的。
我可以創建具有大多數功能的抽象類和擴展它來處理表名稱差異的具體類(基本上,有方法「getTableName()」)。這工作。但是,看起來我創建了很多類,並且我想創建更少的類。
有沒有更好的方法來做到這一點?
我在想爲特定表名使用接口會很好,但是我無法將自己的頭圍繞在Spring和Autowiring的工作方式上。
更新:
只是給我一個我想改進的樣本。 到目前爲止,我有幾個這樣的抽象DAO。他們做數據庫談話。
public abstract class Dao1 {
private static final String PARAM = "p";
private final String QUERY1 = " SELECT * FROM " + getTableName() + " WHERE something";
//here we would also have autowired jdbcNamedTemplate and maybe some other stuff.
public getAll() {
//map parameters, do query return results
}
protected abstract String getTableName();
}
接下來,我有幾個實現抽象方法getTableName()的數據訪問對象。所以如果桌子是「秋天」,我就會有。
@Component
public class AutumnDao1 extends Dao1 {
@Override
protected String getTableName() {
return "AUTUMN";
}
}
所以從上面的例子可以看出,對於每一個抽象DAO我將不得不作出情侶混凝土的DAO(秋,冬,春,夏季)的。目前這是可以接受的,但是在某些時候,這可能會增長到很大數量的daos。
我想知道是否有辦法避免這種情況,例如爲每個「季節」/名稱創建一個類/接口,並根據需要以某種方式將其添加到Dao1,Dao2等。當用戶請求到達時,我只知道哪個名字是相關的。
「我必須根據請求處理從多個相同的表中檢索數據。除了我需要使用不同的表名稱之外,檢索邏輯是相同的。」 - 您可以給出一個示例 – kuhajeyan
您可以嘗試使用接口並注入不同的實現bean @Qualifier。 – Nano
@Nano,我是一個帶註釋的noob。請您詳細說明如何考慮到我最近的更新後可以工作? – Riv