Java は初めてで、基本的なデータベース アクセス レイヤーを実装しようとしています。JDBC ボイラープレート コードを削減するために Apache DBUtils を使用していますが、これは非常にうまく機能しています。
問題は、私の実装では、データベース内の各テーブルの 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
}