hibernate(二)

2021-02-05 22:16

阅读:642

标签:style   span   mic   游离   onclick   判断   指定   打印   show   

目录:

 

1、对象的三种状态

  对象的三种状态
    1)瞬时态(或临时态): 没有与Hibernate产生关联,与数据库中的记录没有产生关联(有关联就是与数据库中的 id 有关联)
    2)持久态: 与Hibernate有关联,与数据库有关联(对象有 id)
    3)游离态(或托管态): 与Hibernate没有关联,与数据库有关联(对象有 id)

  如何判断:

    1)对象有 id 与数据库有关联

    2)使用 session 操作过 对象 与 Hibernate 有关联

 

技术图片

 

  HibernateUtils

技术图片技术图片
package com.oy.helloworld;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
    // 会话工厂,整个程序只有一份。
    private static SessionFactory sf;

    static {
        // 1 加载配置
        Configuration config = new Configuration().configure();

        // 2 获得工厂
        sf = config.buildSessionFactory();
        // 3 关闭虚拟机时,释放SessionFactory
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            public void run() {
                System.out.println("虚拟机关闭!释放资源");
                sf.close();
            }
        }));
    }

    // 获得一个新的session
    public static Session openSession() {
        return sf.openSession();
    }

    // 获得当前线程中绑定session
    public static Session getCurrentSession() {
        return sf.getCurrentSession();
    }
}
View Code

  测试代码

public class TestHelloWorld {
    @Test
    public void fun1() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();
        // ===========================================
        User u = new User();  // 临时态
        u.setUsername("tom"); // 临时态
        u.setPassword("333"); // 临时态
        // save 方法会使用主键生成策略,为 User 指定 id
        session.save(u); // 持久态: 与Hibernate有关联,与数据库有关联(对象有 id)
        // ===========================================
        session.getTransaction().commit(); // 持久态
        session.close(); // 游离态
    }
}
@Test
public void fun2() {
    Session session = HibernateUtils.openSession();
    session.beginTransaction();
    // ===========================================
    User u = (User) session.get(User.class, 1); // 持久状态
    u.setUsername("jerry");
    session.update(u); // 多余代码,Hibernate会自动将持久化状态对象的变化同步到数据库中,无需该代码
    // ===========================================
    session.getTransaction().commit();// 持久状态,打印update语句
    session.close(); // 游离状态
}

 

2、

 

 

 

 

 

 

 

 

 

 

---

hibernate(二)

标签:style   span   mic   游离   onclick   判断   指定   打印   show   

原文地址:https://www.cnblogs.com/xy-ouyang/p/13121488.html

上一篇:前端之HTML

下一篇:前端之CSS


评论


亲,登录后才可以留言!