我是新來的Java,我試圖實現一個基本的數據庫訪問層。 我正在使用Apache DBUtils來減少JDBC樣板代碼,這非常有效。如何減少數據庫訪問層中的代碼重複?
問題是我的實現對我的數據庫中的每個表使用一個單獨的CRUD類,並且感覺錯誤的是要複製這麼多的功能。
這是一個可接受的設計,如果不是我能做些什麼來減少代碼重複?
我可以重構我的解決方案以某種方式使用泛型嗎?
我意識到我可以使用一個ORM(myBatis,Hibernate等)作爲解決方案,但我想嘗試堅持使用DBUtils和普通的JDBC,如果我可以幫助它的話。
只是爲了澄清:
可以說我有2個表...
---------------------
User | File
---------------------
userId | fileId
name | path
age | size
---------------------
在我目前的解決方案,我將創建2類(UserStore,FileStore的)和 每個類將實施類似的基本CRUD方法:
protected boolean Create(User newUser)
{
QueryRunner run = new QueryRunner(dataSource);
try
{
run.update("INSERT INTO User (name, age) " +
"VALUES (?, ?)", newUser.getName(), newUser.getAge());
}
catch (SQLException ex)
{
Log.logException(ex);
return false;
}
return true;
}
protected User Read(int userId)
{
try
{
User user = run.query("SELECT * FROM User WHERE userId = ? ", userId);
return user;
}
catch (SQLException ex)
{
Log.logException(ex);
return null;
}
}
protected update(User user)
{
... perform database query etc
}
protected delete(int userId)
{
... perform database query etc
}
模板方法不起作用,因爲...? – kutschkem 2013-05-13 09:00:43
你的意思是Spring JDBC模板? – Fade 2013-05-13 09:05:50
不,我的意思是模板方法模式http://en.wikipedia.org/wiki/Template_method_pattern – kutschkem 2013-05-13 09:10:43