性能指标:发出的sql语句越少,性能越高。
提高性能方法:
1、懒加载
2、抓取策略
3、缓存策略
4、HQL语句
1、懒加载类型:懒加载就是只加载需要的内容,不需要的不加载。
1.1 类的懒加载
1.2 集合的懒加载
1.3 单端关联的懒加载(多对一)
2、建工程 hibernate_optimize
导包
数据库沿用 Classes 和 Person表
3、建 cn.google.hibernate.test.LazyTest
总结:懒加载就是控制什么时候发出 sql 语句加载数据。针对“类”“集合”“many-to-one”。
结合“抓取策略”一起使用。
提高性能方法:
1、懒加载
2、抓取策略
3、缓存策略
4、HQL语句
1、懒加载类型:懒加载就是只加载需要的内容,不需要的不加载。
1.1 类的懒加载
1.2 集合的懒加载
1.3 单端关联的懒加载(多对一)
2、建工程 hibernate_optimize
导包
数据库沿用 Classes 和 Person表
3、建 cn.google.hibernate.test.LazyTest
public class LazyTest extends HibernateUtils{
/**类的懒加载
* 1、利用session.load() 可以产生代理对象
* 2、在 session.load() 执行时,并不发出sql 语句
* 3、在得到其一般属性时发出 sql 语句
* 4、只针对一般属性有效,标示符属性无效
* 5、默认情况就是懒加载
*/
@Test
public void testLoad(){
Session session = sessionFactory.openSession();
Classes classes = (Classes)session.load(Classes.class, 1L);
s.o.p(classes);
classes.getCid();
session.close();
}
/**集合的懒加载
* 先在数据库中加点数据
* sql 语句是在遍历时发出
* 设置 <set name="" cascade="" lazy='false'>时,在 session.load() 时,集合就被加载
* 设置 <set name="" cascade="" lazy='true'> 时,在遍历集合时加载
* 设置 <set name="" cascade="" lazy='extra'>时,在遍历集合时加载,针对集合做 count,min,max,sum等操作
*/
@Test
public void testSet(){
Session session = sessionFactory.openSession();
Classes classes = (Classes)session.load(Classes.class, 1L);
Set<Student> students = classes.getStudents();
for(Student student: students){ // lazy='true'时,此时才发出 sql 语句
s.o.p(student.getSname());
}
session.close();
}
/**单端关联的懒加载(多对一)
* <many-to-one lazy="false/no-proxy/proxy"> no-proxy 是默认值,相当于 true
* 根据"多"的一端,加载"一"的一端,就一个数据,所以无所谓
*/
@Test
public void testSet(){
Session session = sessionFactory.openSession();
Classes classes = (Classes)session.load(Classes.class, 1L);
Set<Student> students = classes.getStudents();
for(Student student: students){ // lazy="no-proxy" 此时才发出 sql 语句
s.o.p(student.getSname());
}
session.close();
}
}
总结:懒加载就是控制什么时候发出 sql 语句加载数据。针对“类”“集合”“many-to-one”。
结合“抓取策略”一起使用。