码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

时间:2019-11-13 16:33:33      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:int   change   增加用户   new   托管   use   新建   打开   comm   

 

 

对象的三种状态

  瞬时状态:

    实体 没有id.没有与session关联

  持久化状态:

    特点:持久化状态对象的任何改变都会同步到数据库中

  游离态【也称作托管态】:

    实体 有id,没有与session关联

 

  Hibernate向数据库中增加用户调用addUser()方法时

//增加用户
    public void addUser() {
        
        //得到配置信息
        Configuration config = new Configuration().configure();
        //创建sessionFactiory对象
        SessionFactory sessionFactory = config.buildSessionFactory();
        //获取session
        Session session = sessionFactory.openSession();
        //打开事务
        Transaction transcation = session.beginTransaction();
        
        User user = new User();        // =>没有id, 没有与session关联  瞬时状态
        user.setName("Gary");        //=>没有id, 没有与session关联  瞬时状态
        
        
        //存储user对象
        session.save(user);            //有id,与session关联  持久化状态
        
        //提交事务
        transcation.commit();
        //关闭资源
        session.close();    //没有与session关联,有id

        
    }

 

技术图片
package com.Gary.dao;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.Gary.domain.User;

public class UserDao {


    //增加用户
    public void addUser() {
        
        //得到配置信息
        Configuration config = new Configuration().configure();
        //创建sessionFactiory对象
        SessionFactory sessionFactory = config.buildSessionFactory();
        //获取session
        Session session = sessionFactory.openSession();
        //打开事务
        Transaction transcation = session.beginTransaction();
        
        //存储user对象save         只是为了生成id
        //有id,与session有关联,持久化状态
        User user = new User();        // =>没有id, 没有与session关联  瞬时状态
        user.setName("Gary");        //=>没有id, 没有与session关联  瞬时状态
        
        //存储user对象
        session.save(user);            //有id,与session关联  持久化状态    本质:对象状态的转换
                                    //将瞬时->持久    目的:生成id
                
        System.out.println(user.getId());
        
        System.out.println("////////////////////////////////////////");
        
        //提交事务
        transcation.commit();
        //关闭资源
        session.close();    //没有与session关联,有id

        
    }

    
    //删除用户
    public void deleteUser()
    {
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        Session session = factory.openSession();
        Transaction transcation = session.beginTransaction();
        //得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象
        User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        session.delete(user);
        transcation.commit();
        session.close();
    }
    
    
    //修改用户
    public void ChangeUser()
    {
        //读取hibernate.cfg.xml
        Configuration config = new Configuration().configure();
        //获取sessionFactory工厂
        SessionFactory factory = config.buildSessionFactory();
        //获取session
        Session session = factory.openSession();
        //开启事务
        Transaction transaction = session.beginTransaction();
        //根据id,得到session
        User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        //修改名字,将对象改名为lGary
        user.setUsername("lGary");
        //更新数据库中的值
        session.update(user);
        //提交事务
        transaction.commit();
        //关闭session
        session.close();
    }
    
    
    //查询用户
    public void findUser()
    {
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        Session openSession = factory.openSession();
        Transaction transaction = openSession.beginTransaction();
        User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        System.out.println(user);
        transaction.commit();
        openSession.close();
    }
    
}
UserDao.java

 

  对象经历了三种状态的改变

        
        //存储user对象save           只是为了生成id
        User user = new User();     // =>没有id, 没有与session关联  瞬时状态
        user.setName("Gary");       //=>没有id, 没有与session关联  瞬时状态
        
        //存储user对象
        session.save(user);         //有id,与session关联  持久化状态    本质:对象状态的转换
                                    //将瞬时->持久    目的:生成id

  

 

  瞬时态指New 新建的一个对象,没有放在Session时,也没有存储在数据库中。

  持久态,指这个对象存储在数据库中,并且存在于Session会话中。

  而游离态指的是,这个对象存储在数据库中,但已经不存在于Session会话中。

  技术图片

 

   

对象三种状态的转变

  技术图片

 

 

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

标签:int   change   增加用户   new   托管   use   新建   打开   comm   

原文地址:https://www.cnblogs.com/1138720556Gary/p/11849609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!