hibernate基础,各种小知识,慢慢添加

来源:互联网 发布:范德堡大学 知乎 编辑:程序博客网 时间:2024/05/16 19:00
ORM  对象关系映射


Hibernate主键生成策略


实体类的主键最好使用可以为Null的类型,例如Integer、Long等,而不要使用int、long等原始类型。


Session详解:
openSession与getCurrentSession的区别
1.getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
2.openSession每次创建新的Session对象,getCurrentSession使用现有的session对象。(体现出单例模式)


batch-size=“N”抓取策略,表示一次可以提取多少条记录
where=“condition”  抓取的条件




单表查询get与load的区别:
1.在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。(立即加载)
load方法会在调用之后返回一个代理对象。(延迟加载/懒加载)
该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。


2.查询数据库中不存在的数据时,get方法返回null,
load方法抛出异常org.hibernate.ObjectNotFoundException


tips:删除和更新操作前先查询一下该对象是否存在。






一对多映射使用set
<set>的inverse属性:
指定关联关系的控制方向,默认由one方来维护
把inverse设置为true,就由多方来维护关联关系
hibernate默认对set、list等集合使用懒加载,如有需要,在set标签内设置lazy="false",即可取消懒加载
多对一映射使用many to one






Hibernate多对多映射:
多对多关联关系一般采用中间表的形式来实现,即新增一张包含双方主键的关联表
多对多关联可以使用<set>元素和<many-to-many>元素进行配置




Hibernete缓存策略:
并不是指计算机的内存或者CPU的一二级缓存
而是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。




Hibernate一级缓存:
1.Hibernate一级缓存又称为“Session缓存”、“会话级缓存”。
2.通过Session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而从内存中获取,这就是缓存。
3.一级缓存的声明周期和Session相同;Session销毁,它也销毁。
4.一级缓存中的数据可适用范围在当前会话内。


一级缓存的API:
一级缓存无法取消(默认强制开启),用两个方法管理:
evict():用于将某个对象从Session的一级缓存中清除。
clear():用于将一级缓存中的所有对象全部清除。




query.list()方法:直接获取全部的查询
query.iterate()方法:先获取id,然后根据id先在缓存里面找,如果有就取出,没有就再从数据库里查找




Hibernate二级缓存:
每个Session都共用。
二级缓存又称为“全局缓存”、“应用级缓存”
二级缓存中的数据可适用范围是当前应用的所有会话
二级缓存是可插拔式缓存,默认是ehcache,还支持其他的二级缓存组件如:
Hashtable、OSCache、SwarmCache、JBoss TreeCache等




二级缓存的配置步骤:
1.添加二级缓存对应的jar包
commons-logging.jar
ehcache-1.2.3.jar
2.在Hibernate的配置文件中添加Provider类的描述
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
3.添加二级缓存的属性配置文件
ehcache.xml
4.在需要被缓存的表所对应的映射文件中添加<cache/>标签
<cache usage="read-only"/>


<cache/>标签的详细介绍:
usage:指定缓存策略,可选的策略有:transactional,read-write,nonstrict-read-write或read-only
include: 指定是否缓存延迟加载的对象。all,表示缓存所有对象,non-lazy,表示不缓存延迟加载的对象
region: 指定二级缓存区域名




通常会将具有一下特征的数据放入到二级缓存中:
1.很少被修改的数据
2.不是很重要的数据,允许出现偶尔并发的数据
3.不会被并发访问的数据
4.参考数据










































0 0