懒加载(延迟加载)
需要查询关联信息时,使用 Mybatis 懒加载特性可有效的减少数据库压力,首次查询只查询主表信息,关联表的信息在用户获取时再加载。
Mybatis 一对一关联的 association 和一对多的 collection 可以实现懒加载。懒加载时要使用 resultMap,不能使用 resultType。
启动懒加载
Mybatis 默认没有打开懒加载配置,需要在 SqlMapperConfig.xml 中通过settings 配置 lazyLoadingEnabled 来开启懒加载。
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
我们建立一个实例来体现懒加载,体现懒加载的优势
创建一个方法用来创建SqlSessionFactory负责创建每次会话
package com.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSessionUtil {
static SqlSessionFactory sqlSessionFactory;
static {
//读取mybatis配置文件信息
try {
InputStream in = Resources.getResourceAsStream("myBatis-configer.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
//创建SqlSessionFactory负责创建每次会话的sqlSession==connection
//创建开销比较大,所以整个应用程序只需要创建一个
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
我们创建个bean类
package com.pojo;
//一个emp员工类
public class Emp {
private int id;
private String name;
private int age;
private Dept dept;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age