二级缓存

MyBatis延迟加载和缓存

随声附和 提交于 2019-12-01 08:19:22
1、延迟加载(lazyLoadingEnable) (1)什么是延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询的时候,按照设 置延迟加载规则推迟对关联对象的select检索。延迟加载可以有效的减少数据库 的压力。 注意:MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象 都是直接执行查询语句的。 加载时机: 直接加载 :即执行对象的select语句,完成对主加载马上执行对关联对象的select查询。 侵入式延迟加载 :执行对主加载对象的查询时,不会执行对关联对象的查询。但是当要访问主加载对象的详情时马上执行对关联对象的select查询。即对关联对象的执行查询, 侵入到了主加载对象的访问详情中。也可理解为:将关联对象的详情侵入到主加载对象的详情中去,即将关联对象的详情作为主加载对象的一部分出现了! 深度延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的select查询。 注意的问题:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能是使用多表连接所进行的select查询。因为,多表连接查询,实质是对一张表的查询, 对由多个表连接后形成的一张表的查询

延迟加载,一级缓存,二级缓存

北慕城南 提交于 2019-12-01 08:14:41
---恢复内容开始--- 概念: MyBatis中的延迟加载,也称为懒加载,是指在进行表的 关联查询 时,按照设置延迟规则推迟对关联对象的 select查询。例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,这样子延迟加载就可以的减少数据库压力。MyBatis 的延迟加载 只是对关联对象的查询有迟延设置 , 对于主加载对象都是直接执行查询语句的。 加载时机: 直接加载:执行完对主加载对象的 select 语句,马上执行对关联对象的 select 查询。 侵入式延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情属性时,就会马上执行关联对象的 select查询。 深度延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的 select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的 select 查询。 注意:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的 select 语句,不能是使用多表连接所进行的 select 查询。因为,多表连接查询,实质是对一张表的查询,对由多个表连接后形成的一张表的查询。会一次性将多张表的所有信息查询出来。 侵入式延迟加载配置方法: Mybatis-config.xml 大配置文件

Mybatis缓存

陌路散爱 提交于 2019-12-01 08:08:45
一级缓存    查询缓存的使用,主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据,从而提高访问速度。 一.缓存的划分 根据缓存区的作用域与生命周期课划分为:   一级缓存(大配置文件 setting 节点 name 属性)   二级缓存 二.缓存说明   MyBatis 查询缓存的作用域是根据映射文件的 namespace 划分的,相同的 namespace 的 mapper 查询数据放在同一个缓存区域。不同 namespace 下的数据互不干扰。 无论是一级缓存还是二级缓存,都是按照 namespace 进行分别存放的。   一级、二级缓存的不同之处在于, SqlSession 一旦关闭,则 SqlSession 中的数据将不存在,即一级缓存就不复存在。而二级缓存的生命周期与整个应用同步,与 SqlSession 是否关闭无关。换句话说,一级缓存是在同一线程 ( 同一 SqlSession) 间共享数据,而二级缓存是在不同线程 ( 不同的 SqlSession) 间共享数据。 三.一级缓存 在 Mybatis-config.xml 大配置文件中开启一级缓存 <!--一级缓存--> <setting name="localCacheScope" value="STATEMENT"/> 存在证明   同一个会话( SqlSession

mybatis缓存机制

情到浓时终转凉″ 提交于 2019-12-01 07:57:45
Mybatis系统中默认定义了两级缓存:一级缓存和二级缓存,默认情况下,Mybatis只会开启一级缓存,基于SqlSession级别的。二级缓存需要手动开启和配置,他是基于namespace级别的, 为了提高可扩展性,Mybatis提供了Cache接口,可以通过实现Cache接口自定义二级缓存。 一、一级缓存 1、一级缓存(即本地缓存)是基于SqlSession级别的,当Session flush或close后,该Session中的所有Cache将被清空,本地缓存不能被关闭,但可以调用clearCache()来清空本地缓存或者改变缓存的作用于,在Mybatis3.1之后,可以配置本地缓存的作用域--》在核心配置文件中settings标签中配置localCacheScope(SESSION | STATEMENT)默认为SESSION,也就是在一次会话中,STATEMENT只用在语句执行上,同一个SqlSession数据不会被共享 测试同一个SqlSession两次查询同一个对象只发了一条查询SQL,而且对象也相等 2、一级缓存失效的四种方式 1)同一个SqlSession条件不一样 2)不同的SqlSession 3)同一个SqlSession两次查询之间执行了增删改操作 4)两次查询之间执行了clearCache() 清理了缓存 二、二级缓存 也称为全局缓存

hibernate二级缓存理解

血红的双手。 提交于 2019-11-30 16:50:10
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。 Hibernate的缓存包括 Session 的缓存和 SessionFactory 的缓存。 其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。 Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。 SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。 SessionFactory的内置缓存中存放了映射元数据(metadata)和预定义SQL语句(preparedstatement) 映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来 SessionFactory的内置缓存是只读的

hibernate缓存机制详解

北慕城南 提交于 2019-11-30 16:49:41
hibernate的一级缓存 hibernate 是一个线程对应一个 session ,一个线程可以看成一个用户。 也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和线程绑定了。 hibernate一级缓存生命周期很短,和session生命周期一样,一级缓存也称session级的缓存或事务级缓存。如果 tb 事务提交或回滚了,我们称session就关闭了,生命周期结束了。 缓存和连接池的区别 : 缓存和池都是放在内存里,实现是一样的,都是为了提高性能的。但有细微的差别,池是重量级的,里面的数据是一样的,比如一个池里放100个Connection连接对象,这个100个都是一样的。缓存里的数据,每个都不一样。比如读取100条数据库记录放到缓存里,这100条记录都不一样。 缓存主要是用于查询 //同一个session中,发出两次load方法查询 Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); //不会发出查询语句, load使用缓存 student = (Student)session.load(Student.class, 1); System.out.println

MyBatis进阶

六眼飞鱼酱① 提交于 2019-11-30 13:35:37
MyBatis进阶 笔记内容:日志管理、动态SQL、缓存、对象关联查询、分页、批处理和注解 日志管理 日志文件作用:用于记录系统操作事件的记录文件或文件集合,日志保存历史数据,是诊断问题以及理解系统活动的重要依据。 日志分为两部分:比如,SLF4j与Logback,如下图所示 日志门面和日志实现作用区别:统一的门面屏蔽了底层复杂的实现,门面就像插盘的面板规格,插盘内部的电路设计细节不同。门面和实现分开有助于数据迁移。 日志实现组件作用:提供日志的打印、输出、管理 使用步骤 在pom文件中加入logback依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> 可以自定义控制台输出日志的格式:在resources目录下新建logback.xml,规定控制台的输出日志格式。 一般调试时,设置root level级别为debug以上,方便调试。 <configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%thread] %d{HH:mm

mybatis整合Redis实现二级缓存

耗尽温柔 提交于 2019-11-30 12:33:06
Mybatis整合ehcache实现二级缓存 导入相关依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!--mybatis与ehcache整合--> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.1.0</version> </dependency> <!--ehcache依赖--> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.10.0</version> </dependency> 修改日志配置,因为ehcache使用了Slf4j作为日志输出 日志我们使用slf4j,并用log4j来实现。SLF4J不同于其他日志类库,与其它有很大的不同。 SLF4J(Simple logging Facade for Java