一、懒加载的定义:
懒加载:在WEB应用程序中,经常会需要查询数据库,系统的响应速度在很大程度上是与数据库交互的响应。因此,如果能够优化与数据库的交互速度,则能够大大提高WEB应用的响应速度。
例如:当有一个Student类和一个Teacher类。当我们加载一个学生的所有信息,包括:学号,姓名等属性后,此时Student类中的Teacher类型的属性为null,当我们需要知道这个Student对应的Teacher属性的时候,我们才去加载这个Teacher对象。
如果,我们只需要知道学生信息,我们只需要查询一次数据库中的Stduent表,并且不需要根据外键查询Teacher表
如果,我们还需要知道老师信息,我们在查询Student表之后,还需要再做一次查询,查询Teacher表。
二、懒加载的原理及分析:
User.java
public class User {
private int id;
private String name;
private Date birthday;
//省略了setter和getter方法
}
User.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.itcast.hibernate.domain">
<class name="User" table="uuser" lazy="true">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<property name="birthday" />
</class>
</hibernate-mapping>
这是User的实体类和映射文件。
我们来写一个测试的类:
public class Base {
public static void main(String[] args) {
User user = new User("lipenglong", new Date());
addUser(user);
User u = getUser(user.getId());
System.out.println("Birthday:"+u.getBirthday());
}
static void addUser(User user) {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();
Session s = sf.openSession(