Hibernate的知识提练

-:hibernate的对象状态管理机制:
transient:瞬时状态(不与session的关联,数据库没有字段标识,不在hibernate的缓存中)
persisent:持久状态(与session关联,数据中有记录,也在hibernate缓存中)
detach:游离状态(不与session关联,数据库有字段标识,不在hibernate缓存,调用sessin.close()时间变为游离状态);

二:锁机制:
事务锁机制: (乐观锁(保持一种乐观状态的,有可能不发生,程序实现的一种锁),悲观锁(数据库级别的锁))
query.setLockMode criteria.setLockMode  wirte,read none,upgrade(for update强制加锁)
hql查询语言的学习,criteria,criterion标量查询的结果

三:延迟加载
延迟加载是一项广泛的应用的,是为了提高性能,能避免应用的程序过多,过早的加载数据,减少内存的
消耗,提高应用程序的性能,原理是生成的一个代理对象,真正访问对象时才去实例化代理的对象
默认class,set默认延迟为true,session.load()【支持延迟加载】,session.get() 【立即查询数据库】

cascade  inverse[关系维护反转] 默认两方都可以维护(inverse=false)
一般而言:一对多的关联:多的一方进行维护
四:标量查询
hiberante criteria 介绍
http://www.cnblogs.com/mabaishui/archive/2009/10/16/1584510.html

criteria的父接口criteriaSpeciaction是主要实现类,criteria,detachcriteria
criteria的条件是criterion(junction(conjunction,disJunction[junctions]) ,example,criterion(Restrictions.add的静态类来构建))
project接口用来projections.groupBy()来构建查询结果集

五:hiberate支持sql查询
session.createSQLQuery接口参数为sql语句
通过addScala,来优化性能不用查询resultSetMetaData,addEntity映射实体类,addJoin来映射关系
通过sql-query来应用程序的解耦
http://blog.youkuaiyun.com/houpengfei111/article/details/10096215

六:n+1的问题
list和iterator()方法之间的区别:(N+1?) 
list()方法在执行时,直接运行查询结果所需要的查询语句。 
iterator()方法则是先执行得到对象ID的查询,然后在根据每个ID值去取得所要查询的对象。 
因此:对于list()方式的查询通常只会执行一个SQL语句,而对于iterator()方法的查询则可能需要执行N+1条SQL语句(N为结果集中的记录数). 
结果集的处理方法不同: 
list()方法会一次活的所有的结果集对象,而且他会依据查询的结果初始化所有的结果集对象。如果在结果集非常庞大的时候会占据非常多的内存,甚至会造成内存溢出的情况发生。 
iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。一次在访问中可以控制缓存中对象的数量,以避免占用过多的缓存,导致内存溢出情况的发生。

七:hibernate命名策略的选择

数据库和表的规范减少工作量,不一一java文件与数据表的写

defaultNamingStrategy  默认命名策略

imporvedNamingStrategy: 高级命名策略

configruration.setNamingStrategy();设置命名策略 

转载于:https://my.oschina.net/u/561701/blog/1512048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值