Saturday, March 26, 2016
Hibernate简介
http://blog.csdn.net/liujiahan629629/article/details/21442607
Lazy Loading:就是当load一个parent时候并不load其children当其后需要到children的信息再load它lazy loading
session是打开一个query窗口,是一级缓存(查询结果存在内存),只有session close才会释放缓存
sessionFactory是存所有session,是二级缓存(查询结果存在内存)
hibernate.cfg.xml是config hibernate
*.hbm.xml是每一个class和table的映射config
xml可以写程序动态加入xml string,不一定需要预先有xml文件
query.list()对数据全取
query.iterate()对数据全取Id,但需要到其他fields才取所以是N+1 query(N+1问题)
为了适应其他不同需求hibernate还提供HQL[不定参数查询](session.createQuery("FROM Student s where s.sname like ?"))和QBC(cra.add(Restrictions.like("sname", "%s%")))语言
Hibernate包括悲观锁(锁一直加上,性能较低)和乐观锁(数据读写冲突时才加上)
hibernate.cfg.xml:
<propertynamepropertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>支持list一级与二级缓存
User.hbm.xml:
<id name="pid" column="pid">
<generator class="identity"/>
</id>
id是Hibernate给的主键,跟table的主键没有任何关系,给了id以后可以调用函数session.get(id). 如果不写generator,就是用用户给的值,如果给出identity就是用自增值。
NHibernate
NHibernate official
我工作的公司用到了NHibernate,设计者将session设计为singleton导致了一个大型程序越跑越慢,原因session一直在缓存越来越多查询。解决方法1. 每个查询new一个session不要singleton。2. sessionFactory.OpenStatelessSession()(.Net中)
Labels:
Hibernate,
Lazy Loading
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment