public class LazyTest {
@Test
public void testLoad(){
Configuration configuration=new Configuration();
configuration.configure();
SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
// Classes classes=(Classes)session.get(Classes.class,1L);
Classes classes=(Classes)session.load(Classes.class,1L);
System.out.println(classes.getName()); //发出sql语句
session.close();
}
@Test
public void testLoadNO_Session(){
Configuration configuration=new Configuration();
configuration.configure();
SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
Classes classes=(Classes)session.load(Classes.class,1L);
session.close();
//会爆出错误,因为session数据链路已经关闭
System.out.println(classes.getName()); //发出sql语句
}
/**
* 集合默认的就是懒加载
* */
@Test
public void testLoadSet(){
Configuration configuration=new Configuration();
configuration.configure();
SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
Classes classes=(Classes)session.load(Classes.class,1L);
//此时并没有加载
Set<Student> students=classes.getStudents();
for (Student s:students) {
//遍历的时候进行加载
System.out.println(s.getName());
}
session.close();
}
/**
* 修改集合默认,不进行懒加载
* set lazy="false"
* */
@Test
public void testLoadSet_false(){
Configuration configuration=new Configuration();
configuration.configure();
SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
//在执行第一条的时候就加载了classes 和students
Classes classes=(Classes)session.load(Classes.class,1L);
Set<Student> students=classes.getStudents();
for (Student s:students) {
System.out.println(s.getName());
}
session.close();
}
/**
* 修改集合默认,不进行懒加载
* set lazy="extra"
* */
@Test
public void testLoadSet_extra(){
Configuration configuration=new Configuration();
configuration.configure();
SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
//在执行第一条的时候就加载了classes 和students
Classes classes=(Classes)session.load(Classes.class,1L);
Set<Student> students=classes.getStudents();
System.out.println(students.size());
//和true 还不一样,extra是进一步的延时加载,
// 你需要大小,它只查询大小,而true就查询所有的数据再进行大小总结
session.close();
}
}
manytoone的懒加载
可以保持默认值
总结
延迟加载是通过控制SQL语句的发出的时间来提高效率的。