【发布时间】:2011-06-26 10:34:51
【问题描述】:
我正在使用 Spring MVC 构建一个网站。由于我是 Java EE 的新手,我发现很难一次应用所有内容。
那么,我是否可以开始使用简单的 JDBC 和 spring 构建应用程序,然后用 hibernate 替换它?
这种转变会不会更容易,所以我应该先学习hibernate,然后从网站开始?
【问题讨论】:
标签: java hibernate spring jdbc spring-mvc
我正在使用 Spring MVC 构建一个网站。由于我是 Java EE 的新手,我发现很难一次应用所有内容。
那么,我是否可以开始使用简单的 JDBC 和 spring 构建应用程序,然后用 hibernate 替换它?
这种转变会不会更容易,所以我应该先学习hibernate,然后从网站开始?
【问题讨论】:
标签: java hibernate spring jdbc spring-mvc
只有(至少)两个前提条件:
您在 DAO 层中完全抽象了数据库访问。每个 DAO 都应该有一个接口和一个JdbcXDao 实现。稍后您可以添加相同的HibernateXDao
您的 DAO 应该返回域对象。任何结果集或语句都不应脱离 dao。例如,如果您需要获取给定用户的消息,您可以写List<Message> messages = dao.getMessages(user)。
如果不满足以上任一条件,您将很难迁移到休眠模式。
但是之后你可能没有勇气改变整个 DAO 层,所以花一些时间在 hibernate 上并直接开始它。
【讨论】:
如果 JDBC 是构建应用程序所需的全部内容,我认为重写所有内容只是为了使用 Hibernate 没有任何好处。
Hibernate 的主要目的是让您免于使用普通的 JDBC 编写重复的 INSERT/UPDATE/DELETE/SELECT 代码的麻烦。如果您觉得需要,您可以将一些 PLAIN-JDBC 与 Hibernate 混合,并逐渐将 ORM 添加到您的应用程序中。
话虽如此,对于简单的数据库内容,对于需要复杂查询的数据库内容,在我进入基于 Hibernate 的解决方案之前,我会选择普通 JDBC 1000 次。
【讨论】:
是的,当然可以。如果你写得好,它甚至可以很容易做到。
从接口开始你的持久层;只允许您的客户端调用接口引用类型的对象。今天把 JDBC 实现放在后面;明天你可以切换到 Hibernate 实现,你的客户也不会更聪明。这就是界面的美妙之处。
类似这样的:
package persistence;
public interface FooDao
{
List<Foo> find();
Foo find(Long id);
void saveOrUpdate(Foo foo);
void delete(Foo foo);
}
需要注意的重要一点:此接口仅处理您的模型对象,而不是 SQL。持久层处理关系数据库的方式从对象模型开始。这是 Hibernate 的要求。如果您希望有一天能够用 Hibernate 替换它,那么它会立即成为您的 JDBC 实现的强制要求。
【讨论】: