对象状态
例如对于: User user = new User();
user有这几个状态:
临时状态
特点: 直接new出来的对象; 不处于session的管理; 数据库中没有对象的记录;
持久化状态
当调用session的save/saveOrUpdate/getloa/d/list等方法的时候,对象就是持久化状态。
处于持久化状态的对象,当对对象属性进行更改的时候,会反映到数据库中!
特点: 处于session的管理; 数据库中有对应的记录;、
游离状态
它是Session关闭后,对象的状态;
特点 :
不处于session的管理;
数据库中有对应的记录
代码举例:
public void testSaveSet() throws Exception {
Session session = sf.openSession();
session.beginTransaction();
// 创建对象 【临时状态】
User user = new User();
user.setUserName("Jack22222");
// 保存 【持久化状态】
session.save(user);
user.setUserName("Jack333333"); // 会反映到数据库
// 查询
User user = (User) session.get(User.class, 5);
user.setUserName("Tomcat");// hibernate会自动与数据库匹配(一级缓存),如果不一样就更新数据库
session.getTransaction().commit();
session.close();
user.setUserName("Jack444444444"); //不会更新到数据库
// 打印 【游离状态】
System.out.println(user.getUserId());
System.out.println(user.getUserName());
}
一级缓存
使用一级缓存可以减少向数据库发送HQL语句的数量,从而减小数据库的压力,也避免不必要的查询。
概念
1