【问题标题】:Can i replace the JDBC logic with hibernate afterwards之后我可以用hibernate替换JDBC逻辑吗
【发布时间】:2011-06-26 10:34:51
【问题描述】:

我正在使用 Spring MVC 构建一个网站。由于我是 Java EE 的新手,我发现很难一次应用所有内容。

那么,我是否可以开始使用简单的 JDBC 和 spring 构建应用程序,然后用 hibernate 替换它?

这种转变会不会更容易,所以我应该先学习hibernate,然后从网站开始?

【问题讨论】:

    标签: java hibernate spring jdbc spring-mvc


    【解决方案1】:

    只有(至少)两个前提条件:

    • 您在 DAO 层中完全抽象了数据库访问。每个 DAO 都应该有一个接口和一个JdbcXDao 实现。稍后您可以添加相同的HibernateXDao

    • 您的 DAO 应该返回域对象。任何结果集或语句都不应脱离 dao。例如,如果您需要获取给定用户的消息,您可以写List<Message> messages = dao.getMessages(user)

    如果不满足以上任一条件,您将很难迁移到休眠模式。

    但是之后你可能没有勇气改变整个 DAO 层,所以花一些时间在 hibernate 上并直接开始它。

    【讨论】:

    • +1 - 添加不应超出 DAO 的结果集等,还要确保 DAO 接口不声明任何异常,如 SQLException。我经常看到人们构建“技术中立”的 DAO 接口,但仍然在它们上面撒上 SQLExceptions、IOExeptions 等。
    【解决方案2】:

    如果 JDBC 是构建应用程序所需的全部内容,我认为重写所有内容只是为了使用 Hibernate 没有任何好处。

    Hibernate 的主要目的是让您免于使用普通的 JDBC 编写重复的 INSERT/UPDATE/DELETE/SELECT 代码的麻烦。如果您觉得需要,您可以将一些 PLAIN-JDBC 与 Hibernate 混合,并逐渐将 ORM 添加到您的应用程序中。

    话虽如此,对于简单的数据库内容,对于需要复杂查询的数据库内容,在我进入基于 Hibernate 的解决方案之前,我会选择普通 JDBC 1000 次。

    【讨论】:

    • Hibernate 可以进行测试。您将能够使用内存数据库(H2、HSQLDB..)进行单元测试。
    【解决方案3】:

    是的,当然可以。如果你写得好,它甚至可以很容易做到。

    从接口开始你的持久层;只允许您的客户端调用接口引用类型的对象。今天把 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 实现的强制要求。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 2011-07-17
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2011-10-21
      相关资源
      最近更新 更多