hibernate一级缓存

发布于 2019-01-17  449 次阅读


什么是缓存?

1.数据存到数据库里面, 数据库本身是文件系统, 使用流方式操作文件效率不是很高.

(1).把数据存到内存中, 不需要使用流的方式, 可以直接读取内存中数据

(2).把数据放到内存中, 提供读取效率

hibernate 缓存

1.hibernate框架中提供了很多优化, hibernate 的缓存就是一个优化方法.

2.hibernate 缓存特点:

第一类: hibernate 的一级缓存

(1).hibernate 的一级缓存默认就是打开的.

(2).hibernate 的一级缓存有使用范围.是session的范围, 从session创建到session关闭范围

(3).hibernate 的一级缓存中, 存储数据必须是 持久态数据

第二类: hibernate 的二级缓存

(1) 目前已经不使用了, 替代技术 redis

(2)二级缓存默认不是打开的, 需要配置

(3)二级缓存使用范围, 是sessionFactory范围.

验证一级缓存存在:

1.验证方式:

(1)首先根据uid=1查询, 返回对象

(2)其次再根据uid=1查询, 返回对象

//1.根据uid=1查询
            //执行了第一个get方法后是否会查询数据库, 是否发送sql语句
            User user1 = session.get(User.class, 1);
            System.out.println(user1);
            //2.再根据uid=1查询
            ////执行了第二个get方法后是否会查询数据库, 是否发送sql语句
            User user2 = session.get(User.class, 1);
            System.out.println(user2);
/*
        结果:
            Hibernate: 
                select
                    user0_.uid as uid1_0_0_,
                    user0_.username as username2_0_0_,
                    user0_.password as password3_0_0_,
                    user0_.address as address4_0_0_ 
                from
                    t_user user0_ 
                where
                    user0_.uid=?
                User [uid=1, username=小王, password=6666, address=日本]
                User [uid=1, username=小王, password=6666, address=日本]
*/

结论:

第一次执行了get方法之后, 发送sql语句查询数据库

第二次执行get方法之后,没有发送sql语句查询数据库

关于hibernate的相关笔记:

链接:https://pan.baidu.com/s/1swp5FFIHcUdy7WAwc7krzQ 密码:bklj


公交车司机终于在众人的指责中将座位让给了老太太