什么是缓存?
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语句查询数据库
叨叨几句... NOTHING