有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java何时使用Hibernate/JPA/Toplink?

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

编辑:对不起,我应该指定JNDI来查找数据库连接,指定JDBC来执行操作


共 (6) 个答案

  1. # 1 楼答案

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

    一旦你掌握了窍门,你就可以用ORM做任何事情

    对ORM来说没有什么太小的。在你的前两个项目之后,你会发现你无法以任何其他方式工作。ORM映射通常比任何其他工作方式都更有意义

  2. # 3 楼答案

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

  3. # 4 楼答案

    对于一个非常简单的应用程序来说,这似乎有些过头了,尤其是如果你还没有计划扩展它的话。然而,使用这些简单的应用程序似乎也是值得的,这样你就可以更好地了解它们是如何工作的,下次你有了可以使用它们的东西

  4. # 5 楼答案

    简单回答:这取决于你想要支持的复杂性

    详细回答:

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

    如您所知,第一个用于将数据库表映射到类和对象。第二种是为资源提供查找机制,它们可以是数据源、Ejb、队列或其他资源

    也许你的意思是“JDBC”

    至于你的问题:如果这么简单,就没有必要实现ORM。数字表最多在5-10左右,我想操作非常简单

    也许使用普通的JDBC就足够了

    如果使用DAO模式,您可以在需要时更改它以支持ORM策略

    像这样: 假设你有员工表

    创建员工。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;
    }
    

    这只是一个例子,在现实生活中,你可能会让Abstract工厂创建Form DAO,但这不是主题。重点是,您可以从简单开始,通过使用设计模式,您可以在以后根据需要更改实现

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

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

    顺便说一句,自从甲骨文收购BEA之后,他们说他们正在用toplink取代Kodo(weblogic peresistence framework),现在称之为“甲骨文weblogic应用服务器”

    我给您留下一些资源,您可以从中获得更多信息:


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

    PEAA Catalog


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

    The DAO pattern


    这是Hibernate的入门教程:

    Hibernate


    Toplink的官方页面:

    Toplink


    最后,我“认为”JPA的好想法是,你最近可能会更换供应商

    从简单开始,然后进化

    我希望这有帮助

  5. # 6 楼答案

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

    然而,如果没有更多信息,就很难以这样或那样的方式提供推荐