博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate工作原理
阅读量:6837 次
发布时间:2019-06-26

本文共 1293 字,大约阅读时间需要 4 分钟。

 1.Hibernate是如何连接数据库  

 
    主要是通过hibernate.cfg.xml配置文件中的配置  
     
    在这个文件中定义了数据库进行连接所需要的信息,包括JDBC驱动、用户名、密码、数据库方言等,
configuration类借助dom4j的XML解析器解析设置环境,然后使用这些环境属性来生成 SessionFactory。这样这
个sessionFactory生成的session就能成功获得数据库的连接。  
 
    2.Hibernate是如何进行数据库写操作  
     
    对数据库的写操作包括保存、更新和删除,当保存一个POJO持久对象时,触发Hibernate的保存事件监听器
进行处理。Hibernate通过映射文件获得对象对应数据库表名以及属性所对应的表中的列名,然后通过反射机制
持久化对象(实体对象)的各个属性,最终组织成向数据库插入新对象的SQL insert语句。调用了
session.save()方法后,这个对象会标识成持久化状态存放在session中,对于Hibernate来说它就是一个持久化
了的对象,但这个时候Hibernate还不会真正的执行insert语句,当进行session的刷新同部或事务提交时,
Hibernate会把session缓存中的所有SQL语句一起执行,对于更新、删除操作也是采用类似的机制。  
     
    然后,提交事务并事务提交成功后,这些写操作就会被永久地保存进数据库中,所以,使用session对数据
库操作还依赖于Hibernate事务的处理。如果设置了二级缓存,那么这些操作会被同步到二级缓存中,Hibernate
对数据库最终操作也是依赖于底层JDBC对数据库进行。  
     
    3.Hibernate 如何从数据库中载入对象  
     
    当使用session.load()载入对象时,可以设置是否采用延迟加载,如果延迟加载,那么load返回的对象实际
是CGLIB或javassist返回的代理类,它的非主键属性都是空的,这对于对象集合属性很有效。 Hibernate以此来
节约内存,当真正需要读取对象时,Hibernate会先尝试从session缓存中读取,如果session缓存中数据不存在
或者是脏数据并且配置了二级缓存,Hibernate尝试从二级缓存中检索数据,否则Hibernate会根据对象类型,主
键等信息组织select语句到数据中读取,再把select结果组织成对象返回。  
   
    4.Hibernate如何进行数据库查询操作  
    Hibernate提供SQL HQL Criteria查询方式。HQL是其中运用最广泛的查询方式。用户使用
session.createQuery()方法以一条HQL语句为参数创建 Query查询对象后,Hibernate会使用Anltr库把HQL语句
解析成JDBC可以识别的SQL语句,如果设置了查询缓存,那么执行 Query.list()时,Hibernate会先对查询缓存
进行查询,如果查询缓存不存在,再使用select语句查询数据库。
http://tiantiankaixin.iteye.com/blog/776822

转载地址:http://vuqkl.baihongyu.com/

你可能感兴趣的文章
Sicily/1203. The Cubic End
查看>>
进程监控树。
查看>>
如何将ToolBar 样式设置Title文字水平居中
查看>>
Maven 核心原理
查看>>
UVA 1613 K-Graph Oddity
查看>>
‘ActiveX component can’t create object解决方法
查看>>
IIS启用.net2.0
查看>>
sql server 索引阐述系列七 索引填充因子与碎片
查看>>
redis内存策略
查看>>
filter防盗链
查看>>
shell脚本实现ssh自动登录远程服务器示例
查看>>
网络接口和全屏接口的使用
查看>>
1.4(JavaScript学习笔记) window对象的属性及方法
查看>>
IE6下兼容问题(转载)
查看>>
Problem E: 类的初体验(V)
查看>>
如何衡量个人在各自团队的效率和绩效
查看>>
testlink的下载地址
查看>>
通过cell里的UIView获得cell的indexpath
查看>>
【转载】请重新认识你作为程序员的价值
查看>>
canvas 之 - 精灵 钟表动画
查看>>