我是 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
}