二级缓存

Mybatis的二级缓存配置

≡放荡痞女 提交于 2019-12-25 22:45:05
一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要 每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的。 Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的Mapper 映射文件中添加一行: <cache /> 它将采用默认的行为进行缓存: 映射文件中所有的select语句将被缓存 映射文件中所有的insert、update和delete语句将刷新缓存 缓存将使用LRU(Least Recently Used)最近最少使用策略算法来回收 刷新间隔(no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新 缓存会存储列表集合和对象(无论查询方法返回什么)的1024个引用 缓存会被视为read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全的被调用者修改,而不干扰其他调用者或者线程所做的潜在修改 所有这些属性都可以通过缓存元素的属性来修改,比如: <cache eviction="FIFO" flushInterval="10800000" size="512" readOnly="true" /> 这个更高级的配置创建了一个FIFO缓存,并每隔3个小时刷新缓存,储存结 果对象或列表的512个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改他们会导致冲突。 可用的收回策略有

hibernate 5的二级缓存案例讲解

故事扮演 提交于 2019-12-24 02:56:11
hibernate 5的二级缓存案例讲解 本帖最后由 鱼丸儿 于 2018-1-20 11:44 编辑 大家好,今天来记录讲解一下磕磕绊绊的hibernate5 的二级缓存配置,一条路摸到黑 那么在这之前我们先了解一下hibernate的一级缓存和二级缓存分别是什么? 说句通俗的话就是 一级缓存的信息只能在同一个session间传递,而二级缓存是不同的session间可以访问的,可以跨越Session存在,可以被多个Session所共享。需要第三方缓存框架的加持 那么什么数据适合放到二级缓存中呢? 便是那些不经常改动又经常被访问的数据,比如省市信息等,前台页面经常查询而没必要每次都要去数据库查询! 那么有什么三方框架可以支持hibernate的二级缓存呢? EHCache: 可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持 OpenSymphony: 可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持 SwarmCache: 可作为集群范围内的缓存,但不支持Hibernate的查询缓存 JBossCache: 可作为集群范围内的缓存,支持Hibernate的查询缓存 好,那么我们接下来就以EHCache来介绍一下hibernate二级缓存的用法 第一步

MyBatis 一级缓存,二级缓存,延迟加载设置

百般思念 提交于 2019-12-24 00:09:07
1 什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能。 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。 设置延迟加载 需要在SqlMapConfig.xml 文件中,在<settings> 标签中设置下延迟加载。 lazyLoadingEnabled、aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。 true | false false aggressiveLazyLoading 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 true | false true <!-- 开启延迟加载 --> <settings> <!-- lazyLoadingEnabled:延迟加载启动,默认是false --> <setting name="lazyLoadingEnabled" value="true"/> <!-- aggressiveLazyLoading:积极的懒加载,false的话按需加载,默认是true --> <setting name="aggressiveLazyLoading" value

Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存

假如想象 提交于 2019-12-23 12:51:50
1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据库压力,提高数据库性能。 mybatis提供一级缓存和二级缓存。 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 二级缓存是mapper级别的缓存,多个sqlSession去操作同一个Mapper的sql语句,多个sqlSession可以共用二级缓存,二级缓存是跨sqlSession的。 为什么要用缓存? 如果缓存中有数据就不用从数据库中获取,大大提高系统性能。 2.一级缓存 2.1一级缓存工作原理 第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。 得到用户信息,将用户信息存储到一级缓存中。 如果sqlSession去执行commit操作(执行插入、更新、删除),清空sqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。 第二次发去查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。 2.2一级缓存测试 mybatis默认支持一级缓存,不需要在配置文件去配置。 按照上边一级缓存原理步骤去测试。 @Test

Hibernate详解

ⅰ亾dé卋堺 提交于 2019-12-23 02:12:19
核心API 编辑 Hibernate的API一共有6个,分别为: Session 、 SessionFactory 、 Transaction 、 Query 、 Criteria 和Configuration。通过这些 接口 ,可以对持久化对象进行存取、事务控制。 Session Session 接口负责执行被持久化对象的 CRUD 操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是 Session对象 是非 线程安全 的。同时,Hibernate的 session 不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。 SessionFactory SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了 工厂模式 。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 Transaction Transaction 接口是一个可选的API,可以选择不使用这个接口

Mybatis-缓存机制

孤街浪徒 提交于 2019-12-21 18:33:08
像大多数的持久化框架一样,Mybatis也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。 Mybatis中缓存分为一级缓存,二级缓存。 Mybatis一级缓存 Mybatis的一级缓存默认是开启的,而且是不能关闭的。一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存1024条SQL。 一级缓存的原理(SqlSession级别) 第一次发出一个查询sql,sql查询结果写入sqlsession的一级缓存中,缓存使用的数据结构是一个map、 key:MapperID+offset+limit+Sql+所有的入参 value:用户信息 同一个sqlsession再次发出相同的sql,就从缓存中取出数据。 如果两次中间出现commit操作(修改、添加、删除) ,本sqlsession中的一级缓存区域全部清空,下次再去缓存中查询不到之前的数据,所以要从数据库中查询,从数据库查询到再写入缓存中。 代码验证: /** * 测试一级缓存的存在 * @throws Exception */ @Test public void testFirstCache() throws Exception { //1、读取配置文件 InputStream in

Mybait缓存机制

旧街凉风 提交于 2019-12-21 07:33:31
MyBatis同大多数ORM框架一样,提供了一级缓存和二级缓存的支持。 一级缓存:其作用域为session范围内,当session执行flush或close方法后,一级缓存会被清空。 二级缓存:二级缓存和一级缓存机制相同,但是可以自定义其作用范围,如Ehcache。 一级缓存 在默认情况下mybatis中的一级缓存是开启的,一级缓存只在同一个SqlSession中有效不可以跨SqlSession。 @Test public void testcache(){ /** * 测试一级缓存 */ SqlSession session1 = sqlSessionFactory.openSession(); EmployeeMapper employeeMapper = session1.getMapper(EmployeeMapper.class); List<Employee> list1 = employeeMapper.findAll(null); System.out.println(list1); List<Employee> list2 = employeeMapper.findAll(null);//不发送语句 System.out.println(list2); } SqlSession调用clearCache()清除缓存,或者在执行增删改操作后

mybatis缓存

我的未来我决定 提交于 2019-12-21 07:29:50
mybatis入门教程(九)------mybatis缓存 发表于2年前(2014-06-16 14:36) 阅读( 9390) | 评论( 2 ) 21 人收藏此文章, 我要收藏 赞 1 摘要 mybatis,mybatis缓存 mybatis mybatis缓存 目录[-] 9. Mybatis 缓存 9.1 Mybatis的一级缓存 9.1.1 数据表准备 9.1.2 User实体类准备 9.1.3 UserMapper.java 9.1.4 UserMapper.xml 9.1.5 测试 9.1.6 测试结果 9.2 Mybatis的二级缓存 9.2.1 没有开启Mybatis二级缓存之前,测试 9.2.2 User.java 9.2.3 Mybatis 配置文件 9.2.4 Mybatis二级缓存测试 9.2.5 测试结果 9.3 总结 9. Mybatis 缓存 正如大多数持久层框架一样,MyBatis 同样提供了 一级缓存 和 二级缓存 的支持 ? 1 2 3 1 . 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。 2 . 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache

springboot 配置二级缓存

房东的猫 提交于 2019-12-18 20:48:13
springBoot中配置mybatis的二级缓存 2018年01月22日 11:45:37 Ting.Xue(Martin.Xue) 阅读数:5604 更多 个人分类: SSM的Spring框架 Mybatis 在结合springBoot和mybatis的时候想用二级缓存怎么办,请耐心看完。 什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能。 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。 设置延迟加载 需要在SqlMapConfig.xml 文件中,在<settings> 标签中设置下延迟加载。 lazyLoadingEnabled、aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。 true | false false aggressiveLazyLoading 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 true | false true 1 2 3 4 5 6 7 8 9 10 <!-- 开启延迟加载 --> < settings > <!-- lazyLoadingEnabled

HIBERNATE与 MYBATIS的对比

让人想犯罪 __ 提交于 2019-12-16 15:58:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我是一名java开发人员,hibernate以及mybatis都有过学习,在 java面试 中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手。 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 mybatis 就会加快许多,而且语句的管理也比较方便。 第二方面:开发工作量的对比 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap