【问题标题】:When to use Hibernate/JPA/Toplink?何时使用 Hibernate/JPA/Toplink?
【发布时间】:2008-09-23 17:46:37
【问题描述】:

现在我正在制作一个非常简单的网站——大约 5 页。问题是,集成某种数据库映射解决方案是否过于矫枉过正并且值得花时间,还是只使用普通的旧 JNDI 会更好。我可能需要从数据库中读取/写入十几个东西。我想我对这些技术有基本的了解,但仍然需要大量参考文档。之前有其他人面临过这个决定吗?

编辑:抱歉,我应该指定 JNDI 来查找数据库连接和 JDBC 来执行操作。

【问题讨论】:

    标签: java hibernate orm jpa toplink


    【解决方案1】:

    简短回答:这取决于您要支持的复杂性。

    长答案:

    首先,ORM(对象关系映射 - 你称之为数据库映射)和 JNDI(Java 命名和目录接口)是两个不同的东西。

    如您所知,第一个用于将数据库表映射到类和对象。二是提供资源查找机制,可以是DataSources、Ejb、Queues等。

    也许你的意思是“JDBC”。

    现在至于您的问题:如果这么简单,可能就没有必要实现 ORM。数字表最多约为 5 - 10,我猜操作非常简单。

    可能使用普通的 JDBC 就足够了。

    如果您使用 DAO 模式,您可以稍后根据需要对其进行更改以支持 ORM 策略。

    像这样: 假设你有 Employee 表

    您使用数据库的所有字段手动创建 Employee.java(它不应该花费太长时间)和一个带有以下方法的 EmployeeDaO.java:

    +findById( id ): Employee
    +insert( Employee ) 
    +update( Employee )
    +delete( Employee ) 
    +findAll():List<Employee>
    

    而且实现非常简单:

    select * from employee where id = ?
    insert into employee ( bla, bla, bla ) values ( ? , ? , ? )
    update etc. etc 
    

    当(和如果)您的应用程序变得过于复杂时,您可以更改 DAO 实现。例如,在“选择”方法中,您将代码更改为使用执行操作的 ORM 对象。

    public Employee selectById( int id ) {
          // Commenting out the previous implementation...
          // String query = select * from employee where id = ? 
          // execute( query )  
    
          // Using the ORM solution
    
           Session session = getSession();
           Employee e = ( Employee ) session.get( Employee.clas, id );
           return e;
    }
    

    这只是一个例子,在现实生活中你可以让抽象工厂创建 ORM DAO,但那是题外话。关键是您可以从简单开始,通过使用设计模式,您可以在以后根据需要更改实现。

    当然,如果您想学习这项技术,您甚至可以从一张桌子开始。

    选择一种或另一种(即 ORM 解决方案)基本上取决于您使用的技术。例如,对于 JBoss 或其他开源产品,Hibernate 非常棒。它是开源的,有很多资源可以学习。但是,如果您正在使用已经具有 Toplink 的东西(例如 oracle 应用程序服务器),或者如果基础已经构建在 Toplink 上,您应该继续使用该框架。

    顺便说一句,自从甲骨文收购了 BEA,他们说他们正在用现在称为“甲骨文 Weblogic 应用服务器”的 toplink 替换 Kodo(weblogic 持久性框架)。

    我给你留下了一些资源,你可以在其中获得更多信息:


    在这本“企业应用程序架构的模式”一书中,Martin Fowler 解释了在哪里使用一个或另一个,这里是目录。看看数据源架构模式与对象关系行为模式:

    PEAA Catalog


    DAO(数据访问对象)是核心 J2EE 模式目录的一部分:

    The DAO pattern


    这是 Hibernate 的入门教程:

    Hibernate


    Toplink官方页面:

    Toplink


    最后,我“认为”JPA 的好处是您最近可能会更换提供者。

    从简单开始,然后进化。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      对于一个非常简单的应用程序来说,这似乎有点矫枉过正,尤其是如果您没有计划扩展它的话。但是,将它们与这个简单的应用程序一起使用似乎也是值得的,这样您就可以更好地了解它们是如何工作的,以便下次您有可以使用它们的东西时。

      【讨论】:

        【解决方案3】:

        您是指普通的旧 JDBC 吗? 一个小项目可能是学习其中一个 ORM 框架的好机会,尤其是如果你有时间的话。

        但是,如果没有更多信息,很难以一种或另一种方式提供推荐。

        【讨论】:

          【解决方案4】:

          我的经验法则是,如果它是只读的,我愿意在 JDBC 中进行,尽管我更喜欢使用带有 SQLQuery 的空 Hibernate 项目来利用 Hibernate 的类型映射。一旦我必须进行写入,我就会使用 Hibernate,因为设置一些属性然后调用 save 比单独设置每一列要容易得多。当您必须开始优化以避免更新未更改的对象时,最好使用 OR/M 及其脏检查。处理外键关系是您需要映射一次然后使用 getter 的另一个标志。相同的逻辑也适用于 Toplink,尽管除非他们在我使用它的 3 年内添加了类似 HQL 的东西,否则 Hibernate 对于这种从纯 SQL 的过渡会好得多。请记住,您不必映射每个对象/表,只需映射具有明显优势的对象/表。根据我的经验,大多数不使用现有 OR/M 的项目最终都会构建一个新的 OR/M,这是一个坏主意。

          【讨论】:

            【解决方案5】:

            学习 ORM 的最佳方法是在一个小项目上。开始这个项目。

            一旦你掌握了窍门,你就会对所有事情都使用 ORM。

            对于 ORM,没有什么太小了。在你的前几个项目之后,你会发现你不能以任何其他方式工作。 ORM 映射通常比几乎任何其他工作方式都更有意义。

            【讨论】:

              【解决方案6】:

              在这里查看各种 toplink 指南,它们有介绍、示例、场景等

              http://docs.oracle.com/cd/E14571_01/web.1111/b32441/toc.htm

              【讨论】:

                猜你喜欢
                • 2010-12-02
                • 2010-09-09
                • 2011-11-24
                • 2011-07-31
                • 2014-07-15
                • 1970-01-01
                • 2011-11-13
                • 1970-01-01
                • 2010-10-09
                相关资源
                最近更新 更多