也不仅仅是hibernate一个框架的问题了,其实可以上升到O/R Mapping的应用策略问题
几乎每隔几周就会出现类似的讨论,比如[url=http://www.iteye.com/topic/10487] 主题: 有没有Hibernate的成功大型项目实现?[/url]、[url=http://www.iteye.com/topic/143690]Hibernate,憋脚的ORM框架[/url]
这说明这个问题还是很有讨论的必要。
过去的几次比较热烈的讨论我基本都看了,焦点主要集中在这几个方面:
1、以数据库为中心建模 VS 以领域模型为中心建模:
老开发人员大多倾向于前者,因为比较符合过去的开发习惯,另外他们强调数据库的生命周期大于App
向我这样的只有几年工作经验的往往会倾向于后者,因为这能更充分发挥ORM的威力,更符合OO,免去很多维护DB的繁琐工作。
2、Hibernate VS iBatis/JDBC:
担心失去对SQL待控制权,导致不能做优化,DBA反对
Hibernate是在JDBC之上的又一层框架,因此想当然的认为其性能不如iBatis/JDBC(我认为这个结论不成立,因为引入一个ORM层给了我们更多机会去优化性能,比如一二级缓存、lazyload、查询缓存,并且方式更优雅)。参考[url=http://robbin.iteye.com/blog/77338]为什么ORM性能比iBATIS好?[/url]
担心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在同一个项目中并存,就好比突击步枪和狙击步枪的关系,两者都有存在的价值和适用场合,不能互相取代。
但是,显然突击步枪是大量装备的通用武器,而狙击步枪是少量装备的特种武器 :lol:
参考帖子:
[url=http://www.iteye.com/topic/17501]OpenSessionInView会不会影响性能?[/url]
[url=http://robbin.iteye.com/blog/24529]选择Hibernate还是iBatis?[/url]
[url=http://www.iteye.com/topic/20429]选择Hibernate还是iBatis?[/url]
[url=http://www.iteye.com/topic/41720]我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)[/url]
[url=http://www.iteye.com/topic/143690]Hibernate,憋脚的ORM框架[/url]
[url=http://www.iteye.com/topic/113101]对迷茫于Hibernate/JPA的人提一些建议。[/url]
[url=http://robbin.iteye.com/blog/77338]为什么ORM性能比iBATIS好?[/url]
几乎每隔几周就会出现类似的讨论,比如[url=http://www.iteye.com/topic/10487] 主题: 有没有Hibernate的成功大型项目实现?[/url]、[url=http://www.iteye.com/topic/143690]Hibernate,憋脚的ORM框架[/url]
这说明这个问题还是很有讨论的必要。
过去的几次比较热烈的讨论我基本都看了,焦点主要集中在这几个方面:
1、以数据库为中心建模 VS 以领域模型为中心建模:
老开发人员大多倾向于前者,因为比较符合过去的开发习惯,另外他们强调数据库的生命周期大于App
向我这样的只有几年工作经验的往往会倾向于后者,因为这能更充分发挥ORM的威力,更符合OO,免去很多维护DB的繁琐工作。
2、Hibernate VS iBatis/JDBC:
担心失去对SQL待控制权,导致不能做优化,DBA反对
Hibernate是在JDBC之上的又一层框架,因此想当然的认为其性能不如iBatis/JDBC(我认为这个结论不成立,因为引入一个ORM层给了我们更多机会去优化性能,比如一二级缓存、lazyload、查询缓存,并且方式更优雅)。参考[url=http://robbin.iteye.com/blog/77338]为什么ORM性能比iBATIS好?[/url]
担心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在同一个项目中并存,就好比突击步枪和狙击步枪的关系,两者都有存在的价值和适用场合,不能互相取代。
但是,显然突击步枪是大量装备的通用武器,而狙击步枪是少量装备的特种武器 :lol:
参考帖子:
[url=http://www.iteye.com/topic/17501]OpenSessionInView会不会影响性能?[/url]
[url=http://robbin.iteye.com/blog/24529]选择Hibernate还是iBatis?[/url]
[url=http://www.iteye.com/topic/20429]选择Hibernate还是iBatis?[/url]
[url=http://www.iteye.com/topic/41720]我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)[/url]
[url=http://www.iteye.com/topic/143690]Hibernate,憋脚的ORM框架[/url]
[url=http://www.iteye.com/topic/113101]对迷茫于Hibernate/JPA的人提一些建议。[/url]
[url=http://robbin.iteye.com/blog/77338]为什么ORM性能比iBATIS好?[/url]