Hibernate之持久化类,持久化对象状态和缓存机制

一,持久化类

    1,含义:一个Java类和数据库表建立了映射关系,那么这个类就是持久化类。

    2,书写规范:

            a,具有无参构造方法。因为Hibernate底层需要使用反射机制生成类的实例。

            b,具有私有属性,并对私有属性提供getter和setter方法。因为Hibernate底层会将查询到的数据进行封装。

            c,持久化类的属性尽量使用包装类属性(非必要)。因为包装类的语义描述比基本数据类型更清晰。

            d,持久化类要有唯一标识OID(Object Identifier 对象标识符)与表中的主键对应。Hibernate需要根据OID来判断内存中是否具有同一个持久化类。

            e,持久化类尽量不要使用final修饰(非必要)。因为Hibernate具有延迟加载机制,而延迟加载机制会产生代理对象,而这个代理对象其实是产生这个类的子类对象实现的,如果该类用final修饰,就不能派生子类,那么Hibernate的延迟加载机制就会失效,而Hibernate的延迟加载是程序的一种优化手段。

二,持久化对象三种状态

    1,瞬时态(临时态,自由态):没有OID,也没有与Hibernate session产生关联。如Student student = new Student()。

    2,持久态:具有OID,也与Hibernate session 有关联。如 session.save(Obj),session.update(Obj),session.get(Object.class,1L)。

    3,脱管态(游离态,离线态):有OID,但与Hibernate session 没有关联(失去关联)。如:student.setId(8L),session.close()。

    持久态具备自动更新数据库的能力(自动发送sql)。因为Hibernate一级缓存机制的存在。

三,Hibernate缓存机制

    1,hibernate二级缓存机制:sessionFactory级别的缓存,外置缓存,需要导包和配置后才能使用

    2,hibernate一级缓存机制:session级别的缓存,内置缓存,不用配置,默认就可以使用。可以理解为:session中维护着一系列的集合,用来临时存储数据。

    一级缓存为什么能够让持久化对象具备自动发送sql的能力?(一级缓存底层的快照机制:Hibernate向一级缓存中存放一条数据的时候,也同时将复制一份同样的数据放到Hibernate的快照中,当事务提交的时候,hibernate首先会去与快照中的数据进行比对,是否一致,不一致则发送update语句,并将缓存的内容同步到数据库,并更新快照)。

    

    

猜你喜欢

转载自blog.csdn.net/baidu_24257773/article/details/81053257
今日推荐