Java笔记之hibernate(九):属性延迟加载
0.说在前面
1.概念
hibernate中的延迟加载分为属性延迟加载和关系延迟加载,其中的属性延迟加载是对于load方法来说的,使用load方法根据id查询对象数据时并不会直接发送sql进行数据查询,只有在使用到该对象的属性信息时才会发送sql进行查询.
2.新建LoadTest类
package com.hibernate.demo.test; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import com.hibernate.demo.bean.Employee; public class LoadTest { public static void main(String[] args) { //加载配置文件,创建会话工厂对象 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); //创建会话对象 Session session = sessionFactory.openSession(); //调用方法 lazyLoad(session); //关闭会话对象 session.close(); //关闭会话工厂对象 sessionFactory.close(); } /** * 属性懒加载 * @param session */ private static void lazyLoad(Session session){ System.out.println("log1"); //使用load方法根据id查询对象信息 Employee employee = (Employee) session.load(Employee.class, 2); System.out.println("log2"); //获取对象的属性信息 System.out.println(employee.getEmpName()); System.out.println("log3"); } }
3.运行LoadTest类
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. log1 log2 Hibernate: select employee0_.emp_id as emp1_0_0_, employee0_.emp_name as emp2_0_0_, employee0_.dept_id as dept3_0_0_ from t_employee employee0_ where employee0_.emp_id=? 李四 log3
4.总结
从3中的打印信息可以看出: 打印log1和log2之间并没有发送sql进行数据库查询,打印log2与log3之间访问了对象的名称信息,这时才进行了sql语句的发送进行数据库的查询操作,由此可见,load方法是具有属性延迟加载效果的.
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!