延迟加载
在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度要快。
如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联查询,当需要关联信息再查询这个叫延迟加载。
延迟加载:在真正使用数据的时候才发起查询,不用的时候不查询关联的数据,延迟加载又叫按需查询(懒加载)
-
-
association、collection标签属性:colunm 关联两张表的列名;select 要延迟加载的statement的id,即命名空间.SQL执行的id
-
-
延迟加载的好处: 先从单表查询、需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快。
-
延迟加载的实例: 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载
立即加载:不管用不用,只要一调用方法,马上发起查询。
在Mybatis的xml配置文件中配置全局延迟加载
<settings> <!--开启全局的懒加载--> <setting name="lazyLoadingEnabled" value="true"/> <!--关闭立即加载,其实不用配置,默认为false--> <setting name="aggressiveLazyLoading" value="false"/> <!--开启Mybatis的sql执行相关信息打印--> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings>
两个POJO
@Data public class Animal { private int id; private String category; private List<Dog> elements; } @Data public class Dog { private int id; private String name; }
两个Mapper接口
public interface AnimalMapper { List<Dog> findAll() throws Exception; } public interface DogMapper { Dog findById(Integer r_id) throws Exception; }
两个Mapper.xml映射文件
<mapper namespace="mybatis_test.AnimalMapper"> <resultMap id="animalMap" type="mybatis_test.Animal"> <id property="id" column="id"/> <result property="category" column="category"/> <!-- select:要延迟加载的statement的id , colunm:关联两张表的那个列的列名 --> <collection property="elements" ofType="mybatis_test.Dog" column="r_id" select="mybatis_test.DogMapper.findById"/> </resultMap> <select id="findAll" resultMap="animalMap"> select * from animal; </select> </mapper> <mapper namespace="mybatis_test.DogMapper"> <resultMap id="DogMap" type="mybatis_test.Dog"> <id property="id" column="id"/> <result property="name" column="name"/> </resultMap> <select id="findById" resultMap="DogMap"> select * from Dog where r_id=#{r_id}; </select> </mapper>
当只是获取animal对象时,不会去查dog表;当需要获取animal对象中的List<Dog>属性时,才会去查dog表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具