Hibernate在解决性能问题方面做得非常好
![](/icons/2607dou2.gif)
有了它
![](/icons/2607de.gif)
缓存Cache机制
![](/icons/2607dou.gif)
使用第 3方缓存Cache和数据库连接池
![](/icons/2607dou.gif)
就较好
![](/icons/2607de.gif)
解决
![](/icons/2607de.gif)
性能问题
![](/icons/2607dou2.gif)
但这些还不够
![](/icons/2607dou.gif)
hibernate给了开发者足够
![](/icons/2607de.gif)
自由
![](/icons/2607dou.gif)
让开发者自己去控制性能问题
![](/icons/2607dou2.gif)
学习了
![](/icons/2607yi.gif)
段时间
![](/icons/2607de.gif)
ibatis
![](/icons/2607dou.gif)
我觉得hibernate有着ibatis无法替代
![](/icons/2607de.gif)
优势
![](/icons/2607dou2.gif)
1、开发者都知道
![](/icons/2607dou.gif)
hibernate让我们以oo
![](/icons/2607de.gif)
方式操作数据库
![](/icons/2607dou.gif)
这让我们看到了hibernate
![](/icons/2607de.gif)
强大的处
![](/icons/2607dou.gif)
体验到操作数据
![](/icons/2607de.gif)
方便
![](/icons/2607dou2.gif)
但Gavin King说
![](/icons/2607dou.gif)
hibernate最耀眼的处是hibernate
![](/icons/2607de.gif)
缓存Cache机制
![](/icons/2607dou.gif)
而不是以oo
![](/icons/2607de.gif)
方式操作数据库
![](/icons/2607dou2.gif)
Hibernate
![](/icons/2607de.gif)
缓存Cache机制不外乎是
![](/icons/2607yi.gif)
级缓存Cachesession
![](/icons/2607dou.gif)
2级缓存CachesessionFactory
![](/icons/2607dou.gif)
和第 3方缓存Cache如ehcache
![](/icons/2607dou2.gif)
也就是hibernate
![](/icons/2607de.gif)
最强大
![](/icons/2607de.gif)
地方是它
![](/icons/2607de.gif)
缓存Cache
![](/icons/2607dou.gif)
理解了这个才能真正
![](/icons/2607de.gif)
理解hibernate
![](/icons/2607dou2.gif)
缓存Cache实在太难了
![](/icons/2607dou.gif)
我至今未能真正理解
![](/icons/2607dou2.gif)
2、可维护性:ibatis宣扬写sql语句
![](/icons/2607dou.gif)
它将sql语句放进
![](/icons/2607yi.gif)
个单独
![](/icons/2607de.gif)
xml文件
![](/icons/2607dou.gif)
这种方式赢得了很多开发者
![](/icons/2607de.gif)
喜爱
![](/icons/2607dou.gif)
![](/icons/2607yi.gif)
句话
![](/icons/2607dou.gif)
方便维护
![](/icons/2607dou2.gif)
但hibernate同样具有这种功能
![](/icons/2607dou.gif)
而且比ibatis更加强大
![](/icons/2607dou2.gif)
Hibernate
![](/icons/2607de.gif)
命名查询/命名参数查询
![](/icons/2607dou.gif)
就是将hql语句放在
![](/icons/2607yi.gif)
个单独
![](/icons/2607de.gif)
xml文件的中
![](/icons/2607dou.gif)
它仍然让人们以面向对象
![](/icons/2607de.gif)
方式去操纵数据
![](/icons/2607dou.gif)
这得到大量遵循oo方式开发者
![](/icons/2607de.gif)
喜爱
![](/icons/2607dou.gif)
而不用在以oo
![](/icons/2607de.gif)
方式写着代码
![](/icons/2607de.gif)
同时
![](/icons/2607dou.gif)
然后再转变思维
![](/icons/2607dou.gif)
用面向关系
![](/icons/2607de.gif)
方式去写那些sql语句
![](/icons/2607dou2.gif)
但hibernate不仅做了这些
![](/icons/2607dou.gif)
它
![](/icons/2607de.gif)
native sql查询方式
![](/icons/2607dou.gif)
完全满足sql语句
![](/icons/2607de.gif)
偏爱者
![](/icons/2607dou.gif)
它像ibatis
![](/icons/2607yi.gif)
样
![](/icons/2607dou.gif)
将sql语句放在配置文件的中
![](/icons/2607dou2.gif)
3、性能:我坚信
![](/icons/2607dou.gif)
hibernate性能问题不是问题
![](/icons/2607dou2.gif)
想想那么多大中小项目都在使用hibernate
![](/icons/2607dou.gif)
你还怀疑hibernate
![](/icons/2607de.gif)
性能吗?spring整合hibernate的后
![](/icons/2607dou.gif)
在真正性能瓶颈
![](/icons/2607de.gif)
地方
![](/icons/2607dou.gif)
完全可以使用spring集成
![](/icons/2607de.gif)
jdbc
![](/icons/2607dou.gif)
或直接写存储过程得了
![](/icons/2607dou2.gif)
但首先得确认
![](/icons/2607dou.gif)
这实在是性能瓶颈
![](/icons/2607de.gif)
地方
![](/icons/2607dou.gif)
我想
![](/icons/2607dou.gif)
不应想当然
![](/icons/2607de.gif)
认为性能
![](/icons/2607de.gif)
问题
![](/icons/2607dou.gif)
所谓
![](/icons/2607de.gif)
性能问题阻挠了很多人
![](/icons/2607dou2.gif)
我认为
![](/icons/2607dou.gif)
性能
![](/icons/2607de.gif)
好坏无外是发送sql语句
![](/icons/2607de.gif)
多少而已
![](/icons/2607dou2.gif)
性能好
![](/icons/2607dou.gif)
发送
![](/icons/2607de.gif)
sql语句少
![](/icons/2607dou.gif)
性能差
![](/icons/2607dou.gif)
就是发送大量
![](/icons/2607de.gif)
sql语句
![](/icons/2607dou2.gif)
Hibernate在解决性能问题方面做得非常好
![](/icons/2607dou2.gif)
有了它
![](/icons/2607de.gif)
缓存Cache机制
![](/icons/2607dou.gif)
使用第 3方缓存Cache和数据库连接池
![](/icons/2607dou.gif)
就较好
![](/icons/2607de.gif)
解决
![](/icons/2607de.gif)
性能问题
![](/icons/2607dou2.gif)
但这些还不够
![](/icons/2607dou.gif)
hibernate给了开发者足够
![](/icons/2607de.gif)
自由
![](/icons/2607dou.gif)
让开发者自己去控制性能问题
![](/icons/2607dou2.gif)
我认为开发者可以在以下几个方面自行调优:
a、在查询
![](/icons/2607zifu.gif)
串中
![](/icons/2607dou.gif)
应该总是使用jdbc
![](/icons/2607de.gif)
占位符?
![](/icons/2607dou.gif)
或使用使用命名参数:
![](/icons/2607dou.gif)
不要自查询中使用
![](/icons/2607zifu.gif)
串值来代替非常量值
![](/icons/2607dou2.gif)
b、Flush会影响性能
![](/icons/2607dou.gif)
频繁刷新影响性能
![](/icons/2607dou.gif)
尽量减少不必要
![](/icons/2607de.gif)
刷新
![](/icons/2607dou2.gif)
c、Cascade策略
![](/icons/2607dou.gif)
在几对几
![](/icons/2607de.gif)
关系
![](/icons/2607dou.gif)
正确设置cascade策略
![](/icons/2607dou.gif)
想清楚在操作对象A
![](/icons/2607de.gif)
同时是否需要级联操作对象B
![](/icons/2607dou.gif)
比如在one to many
![](/icons/2607de.gif)
父子关系中
![](/icons/2607dou.gif)
删除了父亲one
![](/icons/2607dou.gif)
需级联删除子many
![](/icons/2607dou.gif)
这时
![](/icons/2607de.gif)
one这端可设置cascade = “delete”
![](/icons/2607dou.gif)
这样在删除one时
![](/icons/2607dou.gif)
会自动删除子
![](/icons/2607dou.gif)
但对子
![](/icons/2607de.gif)
操作不会影响父
![](/icons/2607dou2.gif)
Cascade还有其他
![](/icons/2607de.gif)
属性值
![](/icons/2607dou.gif)
只要设置正确
![](/icons/2607dou.gif)
可提升性能
![](/icons/2607dou2.gif)
d、lazy策略
![](/icons/2607dou.gif)
正确设置延迟加载策略同样会提升性能
![](/icons/2607dou.gif)
在one to many或many to many中
![](/icons/2607dou.gif)
通常总应该延迟加载many
![](/icons/2607de.gif)
![](/icons/2607yi.gif)
方
![](/icons/2607de.gif)
到内存
![](/icons/2607dou2.gif)
设置了lazy = “true”
![](/icons/2607dou.gif)
首先发送sql语句
![](/icons/2607dou.gif)
加载自己到内存
![](/icons/2607dou.gif)
到需要时才加载级联对象;lazy=”false”,则会同时加载自己和级联对象到内存
![](/icons/2607dou2.gif)
e、另外还有集合
![](/icons/2607de.gif)
性能(
![](/icons/2607set.gif)
、list、map、
![](/icons/2607<img src=)
.gif' />)
![](/icons/2607dou.gif)
都应正确设置
![](/icons/2607dou2.gif)
f、正确使用第 3方缓存Cache
![](/icons/2607dou.gif)
在读操作频繁写操作不多
![](/icons/2607de.gif)
情况
![](/icons/2607dou.gif)
使用第 3方缓存Cache可大幅度提升性能
![](/icons/2607dou.gif)
如ehcache
![](/icons/2607de.gif)
缓存Cache策略有:read-only
![](/icons/2607dou.gif)
read-write和notstrict-read-write
![](/icons/2607dou2.gif)
f、 随着hibernate新版本
![](/icons/2607de.gif)
发布
![](/icons/2607dou.gif)
和技术
![](/icons/2607de.gif)
发展
![](/icons/2607dou.gif)
我相信hibernate
![](/icons/2607de.gif)
性能会越来越好
![](/icons/2607dou.gif)
所有性能不是不使用hibernate
![](/icons/2607de.gif)
原因
![](/icons/2607dou2.gif)
4、hibernate不仅仅作为持久层
![](/icons/2607de.gif)
orm框架存在
![](/icons/2607dou.gif)
它除了dao层
![](/icons/2607de.gif)
持久化操作外
![](/icons/2607dou.gif)
还有很多
![](/icons/2607dou2.gif)
在注解annotation已经走向主流
![](/icons/2607de.gif)
今天
![](/icons/2607dou.gif)
hibernate 迅速响应
![](/icons/2607dou.gif)
让xml部署描述符成为可选
![](/icons/2607de.gif)
![](/icons/2607dou2.gif)
Hibernate annotation 对大字段
![](/icons/2607de.gif)
处理只是
![](/icons/2607yi.gif)
个@Lob就搞定了
![](/icons/2607dou2.gif)
hibernate search对Lucene进行了轻量级
![](/icons/2607de.gif)
封装
![](/icons/2607dou.gif)
全文检索变得非常简单
![](/icons/2607dou2.gif)
Hibernate validator被认为是最合理
![](/icons/2607de.gif)
验证方式
![](/icons/2607dou.gif)
将验证策略直接附在贯穿各层
![](/icons/2607de.gif)
领域模型do
![](/icons/2607main.gif)
上
![](/icons/2607dou.gif)
不再需要哪些web框架
![](/icons/2607de.gif)
xml方式
![](/icons/2607de.gif)
验证
![](/icons/2607dou.gif)
代码中不再出现大量
![](/icons/2607de.gif)
非空/null
![](/icons/2607de.gif)
判断
![](/icons/2607dou2.gif)
5、jbpm
![](/icons/2607dou.gif)
Jbpm业务流程引擎
![](/icons/2607de.gif)
持久层采用hibenrnate来实现
![](/icons/2607dou.gif)
要想使用jbpm
![](/icons/2607dou.gif)
hibernate是必须
![](/icons/2607de.gif)
![](/icons/2607dou2.gif)
我想
![](/icons/2607dou.gif)
业务流程管理无比重要
![](/icons/2607dou.gif)
在soa迅速发展
![](/icons/2607de.gif)
今天
![](/icons/2607dou.gif)
如果实施soa项目
![](/icons/2607dou.gif)
业务流程管理是必然和必须
![](/icons/2607de.gif)
![](/icons/2607dou2.gif)
![](/icons/2607yinwei.gif)
soa就是业务和it技术
![](/icons/2607de.gif)
融合
![](/icons/2607dou.gif)
是业务流程管理和it基础架构
![](/icons/2607de.gif)
融合
![](/icons/2607dou2.gif)
在soa中
![](/icons/2607dou.gif)
业务管理是第
![](/icons/2607yi.gif)
位
![](/icons/2607de.gif)
![](/icons/2607dou.gif)
这需要相应
![](/icons/2607de.gif)
技术来实现该业务流程管理
![](/icons/2607dou2.gif)
开源领域
![](/icons/2607de.gif)
jbpm我想会是首选
![](/icons/2607dou2.gif)
所以
![](/icons/2607dou.gif)
为了将来有可能实施soa项目
![](/icons/2607dou.gif)
为了实现soa
![](/icons/2607de.gif)
业务流程管理
![](/icons/2607dou.gif)
应该使用hibernate
![](/icons/2607dou2.gif)
6、大家都知道
![](/icons/2607dou.gif)
hibernate将ejb2时代
![](/icons/2607de.gif)
实体bean赶进了历史
![](/icons/2607dou.gif)
而ejb3
![](/icons/2607de.gif)
jpa标准也只不过是hibernate
![](/icons/2607de.gif)
子集而已
![](/icons/2607dou2.gif)
jsr规范标准请求
![](/icons/2607de.gif)
威力是巨大
![](/icons/2607de.gif)
![](/icons/2607dou.gif)
没有各种jsr规范标准请求
![](/icons/2607dou.gif)
就不会有各种应用
![](/icons/2607chengxu.gif)
框架
![](/icons/2607dou.gif)
各种应用
![](/icons/2607chengxu.gif)
框架只是那些jsr规范标准请求
![](/icons/2607de.gif)
实现者
![](/icons/2607dou2.gif)
jpa作为持久层
![](/icons/2607de.gif)
规范标准标准
![](/icons/2607dou.gif)
引导持久层orm框架
![](/icons/2607de.gif)
方向
![](/icons/2607dou.gif)
jpa同样以面向对象
![](/icons/2607de.gif)
方式操作数据库
![](/icons/2607dou.gif)
而不是写sql语句
![](/icons/2607dou2.gif)
规范标准标准都完全orm
![](/icons/2607dou.gif)
不写sql了
![](/icons/2607dou.gif)
你还有理由不跟着它吗?
7、Spring+hibernate+范型+可变参数
![](/icons/2607dou.gif)
这是
![](/icons/2607yi.gif)
个非常强大
![](/icons/2607de.gif)
组合
![](/icons/2607dou.gif)
对应普通
![](/icons/2607de.gif)
crud操作
![](/icons/2607dou.gif)
你不再需要重复写那些烦人
![](/icons/2607de.gif)
相似
![](/icons/2607de.gif)
dao层和manager层
![](/icons/2607de.gif)
代码
![](/icons/2607dou.gif)
仅仅需要写
![](/icons/2607yi.gif)
次
![](/icons/2607dou.gif)
就完成了所有大量
![](/icons/2607de.gif)
crud操作
![](/icons/2607dou2.gif)
Ibatis尽管也支持范型
![](/icons/2607dou.gif)
但始终没有hibernate支持
![](/icons/2607de.gif)
好
8、Jboss
![](/icons/2607dou.gif)
hibernate是jboss
![](/icons/2607de.gif)
项目
![](/icons/2607dou.gif)
jboss
![](/icons/2607de.gif)
所有项目
![](/icons/2607de.gif)
持久层都采用
![](/icons/2607de.gif)
hibernate
![](/icons/2607dou.gif)
要知道
![](/icons/2607dou.gif)
jsr规范标准组
![](/icons/2607de.gif)
专家们大多数是来自jboss
![](/icons/2607de.gif)
![](/icons/2607dou.gif)
在
![](/icons/2607yi.gif)
定程度上说
![](/icons/2607dou.gif)
jboo引领着java
![](/icons/2607de.gif)
发展方向
![](/icons/2607dou2.gif)
使用hibernate
![](/icons/2607dou.gif)
跟着jboss
![](/icons/2607dou.gif)
不偏离java
![](/icons/2607de.gif)
发展方向
![](/icons/2607dou2.gif)
9、Gavin King
![](/icons/2607dou.gif)
我最崇拜
![](/icons/2607de.gif)
偶像
![](/icons/2607dou.gif)
他不仅发明了强大
![](/icons/2607de.gif)
hibernate
![](/icons/2607dou.gif)
还搞出了同样强大且优雅
![](/icons/2607de.gif)
web2.0应用
![](/icons/2607chengxu.gif)
框架seam
![](/icons/2607dou2.gif)
他是ejb3.0专家组成员的
![](/icons/2607yi.gif)
![](/icons/2607dou.gif)
是jpa规范标准请求
![](/icons/2607de.gif)
领导者
![](/icons/2607dou.gif)
他java领域最有发言权、最权威
![](/icons/2607de.gif)
领袖人物的
![](/icons/2607yi.gif)
![](/icons/2607dou2.gif)
现在
![](/icons/2607dou.gif)
他领导web bean
![](/icons/2607de.gif)
![](/icons/2607dou.gif)
jsr299
![](/icons/2607de.gif)
发展
![](/icons/2607dou.gif)
web bean规范标准
![](/icons/2607de.gif)
制定
![](/icons/2607dou.gif)
全球软件Software巨头如ibm、oracle、bea和apache没有
![](/icons/2607yi.gif)
个反对
![](/icons/2607dou.gif)
纷纷响应
![](/icons/2607dou2.gif)
Web bean
![](/icons/2607dou.gif)
想象起来
![](/icons/2607dou.gif)
实在太美好了
![](/icons/2607dou.gif)
完全
![](/icons/2607de.gif)
松耦合和强类型
![](/icons/2607dou.gif)
所有
![](/icons/2607de.gif)
应用组件生活在
![](/icons/2607yi.gif)
个应用组件上下文context中
![](/icons/2607dou.gif)
相互合作
![](/icons/2607dou2.gif)
那时将不再有各种各样
![](/icons/2607de.gif)
上下文环境
![](/icons/2607dou.gif)
不再有struts2
![](/icons/2607de.gif)
ActionContext
![](/icons/2607dou.gif)
不再有spring
![](/icons/2607de.gif)
ApplicationContext
![](/icons/2607dou.gif)
不再有hibernate
![](/icons/2607de.gif)
session
![](/icons/2607dou.gif)
不再有持久化上下文
![](/icons/2607dou.gif)
不再有事务上下文
![](/icons/2607dou.gif)
不再有安全上下文
![](/icons/2607dou.gif)
所有组件生活在
![](/icons/2607yi.gif)
个大家庭中
![](/icons/2607dou.gif)
大家其乐融融
![](/icons/2607dou.gif)
实现天下
![](/icons/2607de.gif)
大和平
![](/icons/2607dou2.gif)
10、 osgi
![](/icons/2607dou.gif)
我认为现在最值得学习
![](/icons/2607de.gif)
![](/icons/2607yi.gif)
个技术
![](/icons/2607dou.gif)
有了osgi
![](/icons/2607dou.gif)
实现真正
![](/icons/2607de.gif)
多模块开发
![](/icons/2607dou.gif)
改变传统
![](/icons/2607de.gif)
开发方式
![](/icons/2607dou2.gif)
现在
![](/icons/2607dou.gif)
已经有了hibernate osgi
![](/icons/2607dou.gif)
spring dynamic modul(osgi),struts 2 同样实现了对osgi
![](/icons/2607de.gif)
支持
![](/icons/2607dou2.gif)
目前
![](/icons/2607dou.gif)
eclipse是基于osgi开发
![](/icons/2607de.gif)
![](/icons/2607dou.gif)
ibm
![](/icons/2607de.gif)
websphere v6.1
![](/icons/2607dou.gif)
bea
![](/icons/2607de.gif)
所有产品都重构在osgi上
![](/icons/2607dou.gif)
spring
![](/icons/2607de.gif)
应用服务器同样基于osgi
![](/icons/2607dou.gif)
在EclipseCon2007上
![](/icons/2607dou.gif)
osgi成为了主要
![](/icons/2607de.gif)
话题
![](/icons/2607dou2.gif)
Osgi受到如此
![](/icons/2607de.gif)
待遇
![](/icons/2607dou.gif)
![](/icons/2607yi.gif)
点不奇怪
![](/icons/2607dou.gif)
![](/icons/2607yinwei.gif)
他具有无比强大
![](/icons/2607de.gif)
功能
![](/icons/2607dou.gif)
改变传统
![](/icons/2607de.gif)
软件Software开发方式
![](/icons/2607dou2.gif)
Osgi采用树设计模式
![](/icons/2607dou.gif)
将
![](/icons/2607yi.gif)
个项目分成多个模块(bundle)
![](/icons/2607dou.gif)
每个模块单独部署
![](/icons/2607dou.gif)
单独运行
![](/icons/2607dou.gif)
说白了
![](/icons/2607dou.gif)
就是将
![](/icons/2607yi.gif)
个工程分成许多
![](/icons/2607de.gif)
插件
![](/icons/2607dou.gif)
每个插件单独开发
![](/icons/2607dou.gif)
重复使用
![](/icons/2607dou.gif)
实现完全
![](/icons/2607de.gif)
即插即用
![](/icons/2607dou2.gif)
太令人激动了
![](/icons/2607dou2.gif)
如果公司
![](/icons/2607de.gif)
软件Software开发基于osgi
![](/icons/2607dou.gif)
将会有大量
![](/icons/2607de.gif)
重复使用
![](/icons/2607de.gif)
osgi bundles
![](/icons/2607dou.gif)
公司将会积累大量
![](/icons/2607de.gif)
无形资产
![](/icons/2607dou.gif)
软件Software开发将会越来越快
![](/icons/2607dou2.gif)
而ibatis现在还没见到对osgi
![](/icons/2607de.gif)
支持
![](/icons/2607dou2.gif)
11、hibernate
![](/icons/2607de.gif)
社区非常繁荣
![](/icons/2607dou.gif)
ibatis则相对平静
![](/icons/2607dou2.gif)
综述
![](/icons/2607dou.gif)
hibernate还有很多优秀
![](/icons/2607de.gif)
特点
![](/icons/2607dou.gif)
只是我们不知道
![](/icons/2607dou2.gif)
Hibernate和ibatis
![](/icons/2607dou.gif)
就像大家闺秀对小家碧玉
![](/icons/2607dou.gif)
大家闺秀不仅具有小家碧玉
![](/icons/2607de.gif)
全部
![](/icons/2607dou.gif)
而且知名度更高
![](/icons/2607dou.gif)
更受尊敬
![](/icons/2607dou.gif)
更受人追捧
![](/icons/2607dou.gif)
更有发展前途
![](/icons/2607dou2.gif)
小家碧玉尽管也很有魅力
![](/icons/2607dou.gif)
但始终比上大家闺秀
![](/icons/2607dou2.gif)
Hibernate所做
![](/icons/2607de.gif)
不仅仅是dao层
![](/icons/2607de.gif)
持久化工作
![](/icons/2607dou.gif)
而ibatis恰恰如此
![](/icons/2607dou2.gif)
选择hibernate
![](/icons/2607dou.gif)
选择orm
![](/icons/2607de.gif)
王者
![](/icons/2607dou.gif)
选择更全面
![](/icons/2607de.gif)
工作体验
![](/icons/2607dou.gif)
选择更高效
![](/icons/2607de.gif)
工作方式
![](/icons/2607dou.gif)
选择更多
![](/icons/2607de.gif)
利润;选择Gavin King
![](/icons/2607dou.gif)
跟着领袖走;选择jboss
![](/icons/2607dou.gif)
追随开源
![](/icons/2607de.gif)
潮流
![](/icons/2607dou.gif)
不偏离java
![](/icons/2607de.gif)
发展方向
![](/icons/2607yi.gif)
切都不是借口
![](/icons/2607dou2.gif)
![](/icons/2607yi.gif)
切都在发展
![](/icons/2607dou.gif)
hibernate会越来越好
延伸阅读
最新评论