1. 对象生命周期图
2. 对象的 3 种状态
- a) 临时状态/瞬时状态
该对象是新创建的;一个持久化状态的对象被删除;一个游离状态的数据被删除 - b) 持久化状态
对象从数据库中查询出来时,临时状态的数据被保存时,游离状态的数据被更新/
锁定 - c) 游离状态
持久化状态的数据被(session)清理
3.对象生命周期案例一
public void testSession() {
Session session = null;
// 瞬时状态
User u = new User("西毒", 70);
try {
session = HibernateUtil.getSession();
session.beginTransaction();
// 持久状态----做脏数据检查 将 session 数据和数据库同步
session.save(u);
u.setAge(80);
// session.update(u);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
session.close();
}
}
// 对象 u 是游离状态
System.out.println("======" + u);
try {
session = HibernateUtil.getSession();
session.beginTransaction();
// 删除
session.delete(u);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
session.close();
}
}
// 瞬时状态
System.out.println("======" + u);
}
4. 对象生命周期案例二
public void testGet(){
Session session = null;
User u =null;
try{
session = HibernateUtil.getSession();
session.beginTransaction();
//持久状态
/*
* get 查询数据如果数据不存在则返回 null
* load 查询数据如果数据不存在则抛出异常
* */
u = (User)session.get(User.class,4);
//u = (User)session.load(User.class, 50);//瞬时状态
session.delete(u);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
if(session!=null){
session.close();
}
}
System.out.println("===="+u);
try{
session = HibernateUtil.getSession();
session.beginTransaction();
//持久状态 save 直接添加数据发出一条 insert 语句
session.save(u);
//saveOrUpdate 判断保存的对象是否有 id,如果有则发出
update 语句
//如果没有则发出 insert 语句
//session.saveOrUpdate(u);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
if(session!=null){
session.close();
}
}
}
@Test
public void testDelete() {
Session session = null;
User u = null;
try {
session = HibernateUtil.getSession();
session.beginTransaction();
u = new User();
u.setId(7);
session.delete(u);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
session.close();
}
}
}
@Test
public void testUpdate() {
Session session = null;
User u = null;
try {
session = HibernateUtil.getSession();
session.beginTransaction();
u = new User();
u.setId(3);
u.setName("南帝");
u.setAge(66);
session.update(u);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
session.close();
}
}
}
5. 总结
- 临时状态:内存有,数据库没有
- 持久状态:内存有,session 有,数据库有
- 游离状态:内存有,数据有
网友评论