JAVAEE

JAVAEE框架学习——Hibernate——持久化

2018-05-15  本文已影响4人  So_ProbuING

Hibernate持久化类的编写规则

持久化类

Hibernate是持久层的ORM映射框架,专注于数据的持久化操作。持久化就是将内存中的数据永久存储到关系型数据库中。所谓的持久化类指的是一个Java类与数据库表建立了映射关系。这个类就称为持久化类

持久化类的编写规则

主键类型

主键生成策略

   <id name="cust_id">
            <!--generator 主键生成策略,每条记录录入时,主键的生成规则
            identity:主键自增 由数据库来维护主键值,录入时不需要指定主键
            increment:主键自增 由hibernate来维护,每次插入前会先查询表中id最大值。最大值+1作为新主键值
                        存在线程安全问题,在并发访问的时候会产生数据问题
            sequence:Oracle中的主键生成策略。
            hilo:高低位算法,主键自增,由Hibernate来维护
            native:hilo+sequence+identity 三选一策略。根据数据库对自动生成表示符的能力来选择
            uuid:产生随机字符串作为主键主键类型必须为String类型
            assigned:自然主键生成策略。由用户自己手动自定id值,hibernate不会管理主键值,由开发人员自己录入
            -->
            <generator class="increment"></generator>
        </id>

持久化对象的状态

Hibernate中持久化分为三种状态:瞬时态、持久态、托管态

瞬时态

瞬时态称为临时态或者自由态,瞬时态的实例是由new命令创建、开辟内存空间的对象。不存在持久化标识OID,尚未与Hibernate Session关联,在数据库中也没有记录。失去引用后将被JVM回收。瞬时态的对象在内存中是孤立存在的,与数据库中的数据无任何关联。仅是一个信息携带的载体

持久态

持久态的对象存在持久标识OID,加入到了Session缓存中,并且相关联的Session没有关闭,在数据库中有对应的记录。每条记录只对应唯一的持久化对象。持久态对象是在事物未提交前变成持久态的。

脱管态

脱管态也称离线态或者游离态,当某个持久化状态的实例与Session的关联被关闭时就变成了脱管态。脱管态对象存在持久化标识OID,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联。脱管状态对象发生改变时Hibernate不能检测到。

  //获得session
        Session session = HibernateUtils.openSession();
        //打开事物
        Transaction transaction = session.beginTransaction();
        //执行操作
        Customer customer = new Customer(); //没有id 没有与session关联=>瞬时状态
        customer.setCust_name("联想");//瞬时态
        session.save(customer);//持久化状态 有id 有session关联
        //提交事物
        transaction.commit();
        //关闭资源
        session.close();//脱管状态 游离态 有id 没有session关联

三种状态特点:

持久化状态特点

持久化状态对象的任何变化都会自动同步到数据库中

对象状态的转换

1.瞬时态转换到其他状态

2.持久态对象转换到其他状态

3.脱管态对象转换到其他状态

脱管态对象无法直接获得,是由其他状态对象转换而来的,脱管态对象转换到其他状态总结:

持久化对象转换

Hibernate的一级缓存 快照

缓存的作用:提高效率,提高数据库的操作效率


缓存原理图 快照原理图

一级缓存和对象状态的关系

对象的三种状态用缓存的角度来解释:

上一篇 下一篇

猜你喜欢

热点阅读