一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。
二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。
三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构:
传统的架构:
1) Session Bean <-> Entity Bean <-> DB
为了解决性能障碍的替代架构:
2) Session Bean <-> DAO <-> JDBC <-> DB
使用Hibernate来提高上面架构的开发效率的架构:
3) Session Bean <-> DAO <-> Hibernate <-> DB
就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。
2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。
3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。
4、分布式,安全检查,集群,负载均衡的支持
由于有SB做为Facade,3个架构没有区别。
四、EB和Hibernate学习难度在哪里?
EB的难度在哪里?不在复杂的XML配置文件上,而在于EB运用稍微不慎,就有严重的性能障碍。所以难在你需要学习很多EJB设计模式来避开性能问题,需要学习App Server和EB的配置来优化EB的运行效率。做EB的开发工作,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注本身就主要投入精力去考虑的对象持久层的设计上来。
Hibernate难在哪里?不在Hibernate本身的复杂,实际上Hibernate非常的简单,难在Hibernate太灵活了。
当你用EB来实现持久层的时候,你会发现EB实在是太笨拙了,笨拙到你根本没有什么可以选择的余地,所以你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪个方案,因为只有唯一的方案摆在你面前,你只能这么做,没得选择。
Hibernate相反,它太灵活了,相同的问题,你至少可以设计出十几种方案来解决,所以特别的犯难,究竟用这个,还是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不同?运行效率哪个比较好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性可以用Set,可以用List,还可以用Bag,到底哪个效率高,你为难不为难?查询可以用iterator,可以用list,哪个好,有什么区别?你为难不为难?复合主键你可以直接在hbm里面配置,也可以自定义CustomerType,哪种比较好些?你为难不为难?对于一个表,你可以选择单一映射一个对象,也可以映射成父子对象,还可以映射成两个1:1的对象,在什么情况下用哪种方案比较好,你为难不为难?
这个列表可以一直开列下去,直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候,你会觉得幸福呢?还是悲哀呢?如果你是一个负责的程序员,那么你一定会仔细研究每种方案的区别,每种方案的效率,每种方案的适用场合,你会觉得你已经陷入进去拔不出来了。如果是用EB,你第一秒种就已经做出了决定,根本没得选择,比如说集合属性,你只能用Collection,如果是Hibernate,你会在Bag,List和Set之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。
分享到:
相关推荐
开源项目的优点包括透明度、可定制性以及全球开发者的协作创新。 【压缩包子文件的文件名称列表】: generate-default-impl-maven-plugin-master 这表明压缩包内包含的是"generate-default-impl-maven-plugin"的主...
在实际应用中,这种方式的优点是可以避免单表过大,提高查询效率。因为每个子类的特定属性只存在于自己的表中,这使得针对特定子类的查询更加高效。然而,缺点是可能会增加数据冗余,因为一些公共属性会在主表和子表...
它的优点在于可配置性强,可以通过配置文件调整日志输出级别,从调试信息到错误报告,甚至包括性能数据。此外,Log4j支持多种输出目标,如控制台、文件、网络、数据库等。 **SLF4J** SLF4J是一个日志门面(Logging ...
标题 "Spring4.3.2-...开发者可以通过整合这三个框架,利用它们各自的优点,实现高效、灵活且易于维护的代码结构。在实际项目中,还需要确保与服务器环境、数据库和其他服务的兼容性,以及遵循最佳实践和安全标准。
在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...
综上所述,【hibernate3-liquibase-maven】项目结合了Hibernate 3、Liquibase和Maven的优点,提供了一个强大且灵活的数据库管理和Java应用开发环境。通过这个项目,开发者可以更高效地管理数据库变更,同时利用ORM的...
SSH2整合指的是Spring、...总之,SSH2整合提供了一种流行的企业级Java应用开发模式,通过合理利用这三个框架的优点,可以构建出高效、灵活的应用系统。学习和理解SSH2的整合,对于提升Java EE开发能力非常有帮助。
它的优点在于可以动态监控连接池状态,如活动连接数、等待连接数等,并且可以根据实际需求动态调整池的大小。Proxool通过代理的方式管理数据库连接,减少了创建和销毁数据库连接的开销,提高了系统性能。 接下来,...
Hibernate Annotation 的优点有: * 简化Hibernate 代码,使持久层的编码过程变得更为轻松。 * 不需要定义持久化类对应的*.hbm.xml 文件,直接以注解方式写入在持久化类中来实现。 * 提供一种强大及灵活的方法来...
6. **优点**: Hibernate 提高了开发效率,减少了数据库操作的复杂性,支持多种数据库,提供了丰富的查询语言和API,并且具备二级缓存功能,能提高应用程序的性能。 7. **学习路径**: 对于初学者,首先需要了解...
它的主要优点包括: 1. 封装JDBC,减少重复代码。 2. 实现ORM(对象关系映射),让开发者可以使用面向对象的方式处理数据库操作。 3. 支持延迟加载(Lazy Loading),提高性能。 4. 提供强大的查询语言HQL...
使用 Hibernate 注解的优点: * 可以简化 Hibernate 代码,使持久层的编码过程变得更为轻松。 * 可以一次性地分配所有旧映射文件,减少配置的复杂性。 * 可以提供一种强大及灵活的方法来声明持久性映射。 安装 ...
**四、Hibernate的优点** 1. **简化数据库操作**:通过ORM,开发者无需直接编写SQL,减少了代码量和出错概率。 2. **支持对象的复杂关系**:Hibernate支持一对多、一对一、多对多等多种关系映射。 3. **缓存机制*...
五、Hibernate Spatial 4 的优点 Hibernate Spatial 4 提供了对空间几何对象的数据库操作支持,包括空间查询、空间索引和空间分析等功能。它还提供了与其他 Hibernate 项目的集成支持。 六、结论 Hibernate ...
1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 1.2.1 概念模型 1.2.2 关系数据模型 1.2.3 域模型 1.2.4 域对象 1.2.5 域对象之间的关系 1.2.6 域对象的...
- **优点**: - 事务管理统一。 - 自动化Bean装配。 - 方便的异常转换。 #### 十七、总结 本书不仅介绍了Hibernate的基本概念和技术细节,还深入探讨了其高级特性和实际应用场景。对于希望深入了解Hibernate框架...
在Hibernate 5.2.6 Final版本中,它继承了前一版本的优点,并在性能优化、API改进等方面做出了许多提升。 二、Hibernate 5.2.6 Final新特性 1. 性能优化:此版本对查询性能进行了显著提升,通过改进缓存机制和查询...
优点是节省空间,缺点是当枚举顺序改变时可能导致数据错误。 - `NAME`:将枚举的名称存储为字符串。这种方式更安全,因为名称不会因枚举顺序改变而受影响,但占用的空间较多。 - `TYPE`:自定义类型映射,需要实现...
Hibernate 优点** - **无需依赖容器**:降低了开发难度,减少了代码量,加快了开发周期。 - **封装 JDBC**:自动生成高效 SQL 代码。 - **状态管理**:提供对象状态的管理,例如瞬态、持久化和分离状态。 - **HQL*...
3. **Struts2框架**:Struts2是一个基于MVC设计模式的Web应用框架,它继承了Struts1的优点,并吸收了其他优秀框架的特点,如WebWork的Action和Interceptor。Struts2提供了一种强大的拦截器机制,可以方便地进行请求...