前言:
什么是延迟加载?
延迟加载或者也叫惰性加载,懒加载。使用延迟加载可以提高程序的运行效率。Java程序与数据库交互的频次越低,程序运行效率越高,所以我们应该尽量减少Java程序与数据库的交互次数,MyBatis延迟加载就很好的做到了这一点。
通过一个具体的业务场景来理解延迟加载:
班级(Classes)和学生(Student),当我们查询Student对象时,因为有级联关系,所以会将对应的Classes对象一并查询出来,这样就需要发送两条SQL语句,分别查询classes表和student表中的数据。
延迟加载的思路是:当我们查询Student的时候,如果没有调用classes属性,则只发送了一条SQL语句查询Student;如果需要调用classes属性,则发送两条SQL语句查询Student和Classes。所以延迟加载可以看做是一种优化机制,根据具体的代码,自动选择发送的SQL语句条数。
代码:
接下来我们通过代码来实现延迟加载。
1.数据库建表。
classes表:
student表:
2.创建Classes实体类
3.创建Student实体类
4.创建ClassesDAO
5.创建StudentDAO
6.创建ClassesDAO.xml
7.创建StudentDAO.xml
8.查询Student,输出name。
可以看到,执行了两条SQL,分别查询出Student对象和级联的Classes对象,但是此时我们只需要输出Student的name,没有必要去查询Classes对象,开启延迟加载,即可解决这个问题。
9.config.xml中开启延迟加载
10.再次查询Student,输出name,可以看到只打印了一条SQL语句,查询Student对象。
11.查询Student,输出级联Classes对象的name。
可以看到执行了两条SQL,因为此时需要用到Student对象所级联的Classes对象,按需加载,所以在执行查询Student的SQL的同时,也需要执行查询Classes的SQL。
专业 热爱 专注
致力于最高效的Java学习
Java大联盟
领取专属 10元无门槛券
私享最新 技术干货