- 对象的三种状态(hibernate管理的对象)
1.1 临时状态
1.2 持久状态
1.3 游离状态
hibernate通过管理对象来操作数据库,这里对象指的是持久态的对象。
各种状态的对象是可以相互转换。
2.一级缓存、快照(orm特性)
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 2);
System.out.println(user.getUserName());
user.setUserName("呵呵");
transaction.commit();
session.close();
一级缓存又被称为session级别的缓存
- 1.相当于数据库中的某一条数据在hibernate中产生一个快照,并且将值封装进对象
- 2.user如果说发生改变,那么它会与hibernate中的快照进行对比,如果说不一致,那么就会修改数据库中的数据。
- 加载策略
1 立即加载
/**
* get立即加载
* @param user
* @return
*/
public User get(User user) {
Session session = SessionFactoryUtil.getSession();
Transaction transaction = session.beginTransaction();
System.out.println(123);
User u = session.get(User.class, user.getId());
System.out.println(456);
System.out.println(u.getUserName());
transaction.commit();
session.close();
return u;
}
2 延迟加载( 懒加载)
什么是懒加载?
* 将查询的oid(object id)保存到session的代理proxy中,当要真正用到
* 查询的对象的时候,再去执行查询SQL语句。
/**
* 懒加载,
* @param user
* @return
*/
public User loadget(User user) {
Session session = SessionFactoryUtil.getSession();
Transaction transaction = session.beginTransaction();
System.out.println(123);
User u = session.load(User.class, user.getId());
// System.out.println(456);
// System.out.println(u.getUserName());
transaction.commit();
session.close();
return u;
}