hibernate一级缓存

1 hibernate一级缓存存在于session会话中,只要会话不结束缓存会在
2 什么是一级缓存
当我们查询一个类后,在同一个会话当中在此查询这个类的信息的时候,这些信息会被hibernate存储起来,hibernate不需要再去访问数据库,而是从缓存中取出之前查询的内容然后返回。 

优点:减少对数据库的访问频率,减轻数据库的负担

3 Transaction(事务):transaction.commit

当我们做了修改,或者new出一个对象的时候,在提交事务的时候才会想数据库 发送sql语句。
但是存在两个特殊情况。
(1)   我们在一个事务内部查询一个对象出来
            对这个对象作出修改
       在没有transaction.commit的时候我们做了hql 等查询的时候,hibernate会自动保存我们做的修改,然后执行我们的查询。因为hibernate默认认为我们是想要查询当前事务,当前事务就是我们做了修改的这个事务,而不是数据库里面的数据,但是当前数据库并没有保存,所以hibernate自动保存然后执行查询操作。

(2)当我们设置数据库的id是自动递增的时候,在transaction执行之前,在执行save的时候就会发送sql语,因为当数据库提交事务的时候(transaction.commit)的时候就已经生成了SQL语句,当我们提交事务的时候, 如果我们不是设置id递增,而是我们自己指定,或者是由hibernate生成的时候,在transaction.commit之前我们就已经生成好设置id的sql语句来,所以在提交事务之前(transaction.commit)不需要访问数据库,如果我们设置的是id递增的话,id是由数据库底层计算出来的,(虽然我也不太明白数据库是怎样生成id的,为什么不可以在插入的手再由数据库生成id呢?为什么非得在插入之前必须知道这条语句的id),我们暂时只需要明白,在提交事务之前hibernate要和数据库沟通一下,发送sql语句让数据库生成id,然后我们拿着这个id去提交事务。

4 flush 1 检查hibernate缓存中代码和数据库中的代码是否一致,2 如果不一致,那么会计划生成相应的sql语句  3并且发送SQL语句到数据库,这个时候SQL语句在数据库的缓存中,当提交事务的时候(transaction.commit)代码才会被执行,数据库才会被更新。

5 commit commit提交事务,在commit()方法内部有一个flush()方法。也就是说提交事务的时候,首先我们要执行flush方法(1检查缓存中的数据和内存中的数据是不是一致。2如果不一致那么生成相应的SQL语句计划更改数据库3 将缓存中的数据发送到数据库) 然后执行才是commit的主要功能,将发送到数据库的SQL语句提交。

6 clear():会话中的缓存清空

7 refresh():强制访问数据库
当我们缓存中存在查询结果的时候,hibernate不会继续访问数据库,会直接返回缓存中的数据。但是有时候我们在查询完第一次数据之后,会更新数据库,然后进行第二次查询,这样就会导致第二次查询的额数据不是最新的。这个时候在第一次和第二次查询之间加上一个refresh就会强制第二次查询查询数据库。

8 save 将




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值