Hibernate学习

1.个人理解

    Hibernate是一个优秀的对象关系映射(ORM)的持久层框架,它对jdbc进行了轻量的封装。

    我们不用对增删改等数据库操作写额外的sql语句,Hibernate帮我们封装好了。

    对象关系映射就是将实体的字段和数据库表的字段一一匹配,操作实体就相当于操作数据库表,最明显的特征就是hql语句。

    每个对象实体,都可以通过@Entity注解,以及@Table,@column注解和数据库进行匹配。

    Hibernate是跨数据库的框架,它可以通过设置方言来和各种数据库进行匹配

    在Hibernate中如果需要查询多表的多条数据,可以使用DTO对象来接收,但是在写hql语句的时候,DTO对象必须是类的全路径。在hql语句中如果需要关联其他实体进行查询,不能用left join on ,只能通过join 对象.属性来进行查询。

     hql语句存在局限性,在超过3连表查询时会出现异常,这时可以用个session.creatNativeQuery对象来用sql语句查询

    hibernate中的实体有3个状态:

        1.瞬时状态:新new出来的对象,与session物管

        2.持久状态:从session中取出的对象,并且session没有关闭

        3.游离状态:从session中取出的对象,但是session关闭了

说道这就必须了解hibernate的两个缓存:

    1.一级缓存:它是session级别的缓存,可以通过封装好的方法对缓存就行清空等操作,持久化对象改变属性,数据库里的字段对应的值也会发生变化,应为持久化的对象发生了改变,一级缓存也会相应的发生改变,数据库会和一级缓存保持一致。所以这就存在了一个时差的问题。

    2.二级缓存:二级缓存是sessionFactory级别的缓存,二级缓存是通过第三方插件来引入。

   一级缓存,单个会话的对象缓存
    二级缓存,可插拔的缓存插件
    缓存:我们知道常见的数据库,比如oracle、mysql等,数据都是存放在磁盘中。
    虽然在数据库层也做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,而且力度也太小,一般只有表中数据没有变更的时候,数据库对应的cache才发挥了作用。
    但这并不能减少业务系统对数据库产生的增、删、查、改的庞大IO压力。
    所以数据库缓存技术在此诞生,实现热点数据的高速缓存,提高应用的响应速度,极大缓解后端数据库的压力。
    

    缓存不能用于频繁更新的数据,因为缓存是异步的,但是缓存可大大提高查询效率

当session加载或保存一个对象时,如果session的缓存中不存在相应的对象,hibernate就会把该对象加入到一级缓存中。
    当再次通过session加载相同OID的对象时,Hibernate将直接从session的缓存中获取。
    当session关闭时,缓存将被清空。

    作用:
    1.减少访问数据库的频率
    2.保证缓存中的对象与数据库相关的记录同步。

    evict(Object o);指定清空某个对象
    clear();清空缓存

    二级缓存的执行机制
    应用程序--一级缓存--二级缓存--数据库

    二级缓存是可配置的插件,hibernate允许选用以下类型的缓存插件
    1.EHCache
    2.OSCache
    3.SwarmCache
    4.JBossCache
    这些插件都是由第三方提供的
    
    二级缓存策略 usage设定
    transaction 事务缓存,可支持事务回滚
    read-only缓存的对象只可以读取
    read-write缓存的对象可读写

    在使用二级缓存时需要开启二级缓存
    session.creatQuery("").setCacheable(true).list();

    


Hibernate的配置



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值