之前几篇博客简单介绍了hibernate基本知识,和几种常见的映射,还有一些不常用的映射例如:继承映射、复合主键映射等就不介绍了。本篇博客讲介绍hibernate其他的一些常用知识。
一、lazy策略
lazy懒加载可以提高效率,在真正使用的时候再去创建,再发出sql语句加载该对象,提升了性能。
lazy有以下策略:
1、lazy可以在映射文件的
2、lazy可以在映射文件的
3、lazy可以在映射文件的
4、lazy可以在映射文件的
lazy只有session.load()方法支持,get不支持。在load方法执行的时候不会发出sql语句,在查询的实体真正用的时候才会,
例如user.getName()会发出sql语句,然后结果会放在缓存中,之后就可以不发出sql语句了。
注意,lazy只有在session开启的时候才可以使用,关闭了会报 LazyInitializationException:19 - could not initialize proxy
- the owning Session was closed的错误。
二、hql语句
List students=session.createQuery("select id,name from Student").list();
//可以拼串
List students = session.createQuery("select s.id, s.name from Student s where s.name like '%0%'").list();
//可以使用hql返回Student对象
//需要提供构造函数
List students = session.createQuery("select new Student(id, name) from Student").list();
List students = session.createQuery("from Student s where s.classes.name like '%2%'").list();
List students = session.createQuery("select c.name, s.name from Student s join s.classes c").list();
List students = session.createQuery("from Student").setFirstResult(1).setMaxResults(2).list();
二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享,
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。
二级缓存的配置和使用,采用第三方缓存框架ehcache:
* 将ehcache.xml文件拷贝到src下
* 在hibernate.cfg.xml文件中加入缓存产品提供商
org.hibernate.cache.EhCacheProvider
true
注意使用的策略,通常采用
read-only
和
read-write。