hibernate缓存

什么是缓存

数据存储到数据库里面,数据本身是文件系统,使用流方式操作文件的效率不是很高
- 将数据存到内存中,不需要使用流的方式,可以直接读取 内存中的数据
- 把数据放到内存中,提高读取效率

hibernate缓存

  • hibernate 框架中提供了很多的优化方式,hibernate 的缓存是一个优化方式
  • hibernate缓存的特点:
    • ==hibernate一级缓存==
      • hibernate的一级缓存状态默认是 打开的
      • hibernate的一级缓存状态的使用范围是Session范围,从Session创建到Session关闭范围
      • hibernate的一级缓存中,存储数据必须是持久态数据
    • hibernate二级缓存
      • 二级缓存默认不是打开的,需要配置,二级缓存的应用范围并不多,了解即可
      • 二级缓存使用范围,是SessionFactory范围
      • 开启方法
  • 验证一级缓存的存在
    • 通过执行两次相同的查询,判断发送了几次sql语句
    • 结果:

hibernate一级缓存执行过程


- 查询过程:首先从一级缓存找,如果没有从数据库中找
- 第一次,在一级缓存中查询不到,那么从数据库查询结果,将查询的结果放到一级缓存中
- 第二次再查询,那么就直接从缓存中查询
- 一级缓存中,存放的数据不是实体类对象,而是表格中零散的数据,当查询的时候,将这些零散的数据包装成一个实体类对象返回

hibernate一级缓存特性:持久态自动更新数据库

  • 持久态自动更新数据库,对于持久态的实体类对象的修改不需要手动执行update方法
  • 第一次查询,将数据库查询的数据放到一级缓存,通过放置一份到副本,
  • 当第二次查询的时候,如果进行修改操作,会将修改后的值放在一级缓存
    • 当==提交==的时候,判断一级缓存和快照区是否一样,如果不一样,那么提交,数据库更新,
      • 实例:一级缓存和一级缓存副本数据不一样,更新数据库
      • 结果:
    • 如果一样,数据库不更新
      • 实例:一级缓存和一级缓存副本的数据相同,不更新数据库
      • 结果:

事务代码规范化写法

//  规范化写法
    public void test4() {
//      创建SessionFactory对象,使用工具类
        SessionFactory factory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            factory = HibernateUtils.getSessionFactory();
//          获取 Session对象,类似于连接
            session = factory.openSession();
//          开启事务
            transaction = session.beginTransaction();
//          执行增删改查
            Student student = new Student();
            student.setName("王二小");
            student.setAge("23");
            student.setGender("男");
            session.save(student);
//          提交是事务
            transaction.commit();
        } catch (Exception e) {
//          如果发生异常,那么回滚
            transaction.rollback();
//          打印错误日志
            e.printStackTrace();
        }finally {
//          关闭资源
            if(session != null) {
                session.close();
            }
            if(factory != null) {
                factory.close();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值