前言
如果你面试的公司是要求掌握hibernate的话,那么就一定要了解一级缓存、闪照是什么,因为面试的时候一定会拿这个作为面试题
一、对象的三种状态
1.1、临时状态
临时:就是暂时和某事物有一点交集,但是不是长期的
1.2、持久状态
持久:从一开始到最后一直都在一起的
1.3 游离状态
游离:一开始在一起,最后就分道扬镳
*二、一级缓存、快照
hibernate一级缓存是session级别的
①hibernate的一级缓存默认打开的
②hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
③hibernate的一级缓存中,存储数据必须 持久态数据
hibernate快照机制是内存级别的
三、加载策略
3.1、立即加载
举例子,来一个查询语句。
注意这是用的get
当把输出语句放在commit();和session之后时
//创建hibernate核心类
Configuration cfg=new Configuration();
//将核心配置文件,添加到核心类中
cfg.configure("hibernate.cfg.xml");
//创建session工厂
SessionFactory sf = cfg.buildSessionFactory();
//获取session
Session session = sf.openSession();
//开启事物
Transaction ts=session.beginTransaction();
User u=new User();
u.setId(3);
User us =(User) session.get(User.class, u.getId());
ts.commit();
session.clear();
System.out.println(us);
结果图
3.2 延迟加载
注意这是用的load
当把输出语句放在commit();和session之后时
//创建hibernate核心类
Configuration cfg=new Configuration();
//将核心配置文件,添加到核心类中
cfg.configure("hibernate.cfg.xml");
//创建session工厂
SessionFactory sf = cfg.buildSessionFactory();
//获取session
Session session = sf.openSession();
//开启事物
Transaction ts=session.beginTransaction();
User u=new User();
u.setId(3);
User us =(User) session.load(User.class, u.getId());
ts.commit();
session.clear();
System.out.println(us);
效果图
报错了org.hibernate.LazyInitializationException
懒加载异常,延迟加载异常
试验load时session关闭之后在进行加载,就会出现此异常
四、并发控制
1、悲观锁
2、乐观锁
(之后会细说)
总结:如有不懂评论区逛街!!!!