zoukankan      html  css  js  c++  java
  • JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

    对象的三种状态

      瞬时状态:

        实体 没有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会话中。

      

       

    对象三种状态的转变

      

     

  • 相关阅读:
    原生化:AnDevCon 2014 McVeigh 的主题演讲
    MVC 5 App 通过 Facebook OAuth2 登陆(Sign-on)的问题
    MVC 5 第三章 HTML Helper
    Node.js 初探
    MVC 5 第二章 项目结构
    MVC 5 第一章 起航
    新的开始
    Xcode开发如何在调试时轻松找到程序在哪里崩溃?
    100个直接可以拿来用的JavaScript实用功能代码片段(转)
    js得到当前页面的url信息方法(JS获取当前网址信息)
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/11849609.html
Copyright © 2011-2022 走看看