源:http://daquan198163.iteye.com/blog/148055
评:
也不仅仅是hibernate一个框架的问题了,其实可以上升到O/R Mapping的应用策略问题
几乎每隔几周就会出现类似的讨论,比如 主题: 有没有Hibernate的成功大型项目实现?、Hibernate,憋脚的ORM框架
这说明这个问题还是很有讨论的必要。
过去的几次比较热烈的讨论我基本都看了,焦点主要集中在这几个方面:
1、以数据库为中心建模 VS 以领域模型为中心建模:
老开发人员大多倾向于前者,因为比较符合过去的开发习惯,另外他们强调数据库的生命周期大于App
向我这样的只有几年工作经验的往往会倾向于后者,因为这能更充分发挥ORM的威力,更符合OO,免去很多维护DB的繁琐工作。
2、Hibernate VS iBatis/JDBC:
担心失去对SQL待控制权,导致不能做优化,DBA反对
Hibernate是在JDBC之上的又一层框架,因此想当然的认为其性能不如iBatis/JDBC(我认为这个结论不成立,因为引入一个ORM层给了我们更多机会去优化性能,比如一二级缓存、lazyload、查询缓存,并且方式更优雅)。参考为什么ORM性能比iBATIS好? http://robbin.iteye.com/blog/77338?page=2#comments
担心OpenSessionInView模式有性能问题(http://www.iteye.com/topic/17501)
Hibernate无法应付复杂查询(我认为这不是问题,HQL和criteria查询能力很强,再不济还可以用SQL啊)
3、对Hibernate等ORM框架能否胜任大型项目的怀疑:
其实项目大小不是技术选型的主要考虑,关键看项目类型,OLTP还是OLAP、广而浅型的还是窄而深型的、数据量大小等等,这些因素更能影响结果
4、Hibernate学习成本高
不可否认,相对于spring、struts,Hibernate是一个学习曲线陡峭的框架,但是我觉得综合考虑开发效率和长期收益,还是值得学习和采用的
其实有一个事实被很多人忽略了——Hibernate只是对JDBC的一个封装,因此它可以跟iBatis/JDBC在同一个项目中并存,就好比突击步枪和狙击步枪的关系,两者都有存在的价值和适用场合,不能互相取代。
但是,显然突击步枪是大量装备的通用武器,而狙击步枪是少量装备的特种武器
参考帖子:
OpenSessionInView会不会影响性能?
选择Hibernate还是iBatis?
选择Hibernate还是iBatis?
我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)
Hibernate,憋脚的ORM框架
对迷茫于Hibernate/JPA的人提一些建议。
为什么ORM性能比iBATIS好?
相关推荐
《很不错的Hibernate解决方案》一文通过对比几种流行的持久化技术(如JDBC、EJB、JDO等),论证了Hibernate作为ORM工具的优势,并详细介绍了其在物流系统中的具体应用方法。 1. **模型设计**:首先需要根据物流系统...
本篇文章将深入探讨如何在Hibernate框架中调用存储过程,并与JDBC调用存储过程的方式进行比较。 首先,我们要了解存储过程是什么。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可被多次调用,减少了网络...
本篇文章将深入探讨MySQL驱动在Hibernate和JPA中的使用,以及为什么选择特定的驱动版本对于避免问题至关重要。 首先,MySQL驱动主要由Java JDBC(Java Database Connectivity)接口提供,它是Java标准版(Java SE)...
这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与数据库交互的接口,它扮演着应用程序与数据库之间的桥梁角色。与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`...
这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行配置。 ### 1. Hibernate集合映射的基本概念 集合映射是Hibernate中一个核心的概念,它允许我们将数据库表中的多对一...
本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...
本篇文章将基于给定文件中的信息进行深入解析,重点在于介绍 Hibernate 的基础知识及其在 Java 开发领域的重要作用。文件提供的信息虽然较为简略,但已经涵盖了 Hibernate 的概述、演示大纲、关于演讲者 Steve ...
通过使用Hibernate,可以显著减少与数据库交互所需的代码量,并提高应用程序的性能和可维护性。该框架遵循LGPL许可,因此可以在商业产品中使用。 #### 三、为什么要使用Hibernate? 1. **专注于领域模型**:使用...
2. **映射方式**:XML映射文件(hibernate.cfg.xml和.hbm.xml)和注解映射的使用,对比两者的特点和适用场景。 3. **实体类映射**:如何定义实体类,以及如何将类的属性与数据库字段对应,包括基本类型、复杂类型...
对于性能测试,可以比较使用JDBC和Hibernate执行相同任务的时间消耗,评估哪种方式更高效。同时,要关注内存使用情况,因为ORM框架可能会增加内存开销。 在进行测试时,使用单元测试框架,如JUnit,可以帮助自动化...
本篇文章将深入探讨Hibernate 3.3的核心API,帮助读者掌握这一强大的工具。 1. Hibernate核心API概述: Hibernate的核心API包括SessionFactory、Session、Transaction、Query等关键类。SessionFactory是线程安全的...
本篇文章将重点围绕“hibernate-jpa-2.1-api-1.0.0.final-sources.jar.zip”这一压缩包,深入解析Hibernate对JPA 2.1 API的实现,以期帮助读者深入理解其内部机制。 JPA(Java Persistence API)是Java平台上的一个...
本篇文章将深入讲解 Hibernate 的核心概念,并通过实例演示其用法。 ### 1. Session 状态 在 Hibernate 中,Session 是与数据库交互的主要接口,它负责对象的持久化操作。Session 管理的对象有三种状态: - **...
本篇文章将深入探讨“最强大的数据库框架”,并对比分析Mybatis、MybatisPlus和Hibernate这三大主流框架,以及提及的esdk-master项目。 首先,让我们来看看Mybatis。Mybatis是一个轻量级的Java持久层框架,它允许...
- **Spring与Guice整合**:比较两种轻量级依赖注入框架的特点,并给出整合方案。 - **Spring在Websphere下的部署**:描述在IBM Websphere服务器上部署基于Spring的应用程序时可能遇到的问题及解决方案。 ### ...
**描述解析:** 链接指向了一篇名为“kuangyeyazi”的作者在iteye博客上发布的文章,详细介绍了如何在Hibernate中实现一对多双向映射以及如何应用乐观锁机制。虽然描述内容为空,但我们可以根据标题推测文章内容可能...
在Java的持久化框架Hibernate中,HQL(Hibernate Query Language)是专为ORM(对象关系映射)设计的一种SQL方言,用于对数据库进行操作。HQL模糊查询是开发者在进行数据检索时常用的一种功能,它允许我们根据部分...
- **Hibernate方案**:Hibernate通过更简洁的配置和更灵活的ORM特性,在许多方面都表现出了优势,尤其是在性能优化和易于维护方面。 #### 四、相关技术和组件 ##### 4.1 额外的软件组件 除了持久层框架本身之外,...
本篇文章将探讨在Hibernate中如何使用Clob类型来处理大文本数据,主要涉及Clob类型的概念、使用场景、在Hibernate中的配置以及一些注意事项。 Clob(Character Large Object)是SQL标准定义的一种数据类型,用于...
在博客系统中,Hibernate用于将博客文章、评论等业务对象与数据库表进行映射,通过SessionFactory创建Session,然后通过Session执行CRUD(Create、Read、Update、Delete)操作。此外,Hibernate还支持HQL(Hibernate...