二级缓存

hibernate一级缓存和二级缓存的区别

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

Hibernate学习之Hibernate一级缓存和二级缓存

百般思念 提交于 2020-02-25 01:48:25
一级缓存和二级缓存 缓存概念   缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。   Hibernate的缓存包括 Session的缓存和SessionFactory的缓存 ,其中SessionFactory缓存又可以分为两类:内置缓存和外置缓存。 Session缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。 SessionFactory 的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一 些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件

Hibernate一级缓存与二级缓存的区别

孤街醉人 提交于 2020-02-25 01:47:54
一级缓存:   就是 Session级别的缓存。一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中。   如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。   它是内置的 事务范围的缓存, 不能被卸载。 二级缓存:   就是 SessionFactory级别的缓存。顾名思义,就是查询的时候会把查询结果缓存到二级缓存中。   如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。   这是 可选的 插件式的缓存,在默认情况下,SessionFactory不会启用这个插件。    可以在每个类或每个集合的粒度上配置。 缓存适配器用于把具体的缓存实现软件与Hibernate集成。 严格意义上说,SessionFactory缓存分为两类:内置缓存和外置缓存。我们通常意义上说的二级缓存是指外置缓存。 内置缓存与session级别缓存实现方式相似。前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据 SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句。   映射元数据是映射文件中数据的拷贝;  

Hibernate一级缓存与二级缓存的区别

半腔热情 提交于 2020-02-25 01:46:25
一级缓存:   就是 Session级别 的缓存。一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中。   如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。   它是内置的 事务范围的缓存 , 不能被卸载 。 二级缓存:   就是 SessionFactory级别 的缓存。顾名思义,就是查询的时候会把查询结果缓存到二级缓存中。   如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。   这是 可选的 插件式的缓存 ,在默认情况下,SessionFactory不会启用这 个插件。    可以在每个类或每个集合的粒度上配置 。 缓存适配器 用于把具体的缓存实现软件与Hibernate集成。 严格意义上说,SessionFactory缓存分为两类:内置缓存和外置缓存。我们通常意义上说的二级缓存是指外置缓存。 内置缓存与session级别缓存实现方式相似。前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据 SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句。   映射元数据是映射文件中数据的拷贝;

Hibernate缓存原理与策略 Hibernate缓存原理:

可紊 提交于 2020-02-25 01:44:55
Hibernate缓存原理 : 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等,但随之带来的就是数据访问效率的降低,和性能的下降,而缓存就是弥补这一缺点的重要方法. 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问层中间.ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用,从而避免了数据库调用性能的开销.而相对内存操作而言,数据库调用是一个代价高昂的过程. 一般来讲ORM中的缓存分为以下几类: 1: 事务级缓存 :即在当前事务范围内的数据缓存.就Hibernate来讲,事务级缓存是基于Session的生命周期实现的,每个Session内部会存在一个数据缓存,它随着 Session的创建而存在,随着Session的销毁而灭亡,因此也称为Session Level Cache. 2: 应用级缓存 :即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享(数据库事务或应用事务),事务之间的缓存共享策略与应用的事务隔离机制密切相关.在Hibernate中,应用级缓存由SessionFactory实现

hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存

若如初见. 提交于 2020-02-25 01:43:21
二级缓存(sessionFactory):    Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存。它可以缓存整个应用的持久化对象,所以又称为“SessionFactory缓存”.    hibernate二级缓存中的缓存对象可以被整个应用的Session对象共享,即使关闭当前Session对象,新建的Session对象仍可使用。使用Hibernate的二级缓存之后查询数据,Session对象会首先在以及缓存中查找有无缓存数据被命中。如果没有,则查找二级缓存。如果有,则直接返回所命中的数据;否则查询数据库   下面介绍在hibernate中如何开启和使用二级缓存:   1.在hibernate.cfg.xml中开启二级缓存,并且配置cache.region.factory_class: <!-- 开启二级缓存 --> <property name="cache.use_second_level_cache">false</property> <!-- 配置cache.region.factory_classs --> <property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>   2

MyBatis-日志、分页、缓存

非 Y 不嫁゛ 提交于 2020-02-24 20:07:35
日志 如果一个数据库的操作出现了异常,这时候我们需要排错,日志就是最好的助手。 之前使用的是输出语句或者debug。现在使用的是日志工厂。 在MyBatis中具体使用哪一个日志实现,在设置中进行设定即可。在设定的时候注意区分大小写。 STDOUT_LOGGING STDOUT_LOGGING标准日志输出。 在MyBatis核心配置文件中,配置日志。 < settings > < setting name = " logImpl " value = " STDOUT_LOGGING " /> </ settings > Log4j Log4j 是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件。 我们可以控制每一条日志的输出格式。 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 1、导入log4j的包 < dependency > < groupId > log4j </ groupId > < artifactId > log4j </ artifactId > < version > 1.2.17 </ version > </ dependency > 2、编写 log4j.properties

MyBatis和Hibernate相比较

若如初见. 提交于 2020-02-23 07:30:50
作者:乌拉拉 链接:http://www.zhihu.com/question/21104468/answer/58579295 1、开发对比开发速度 Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 开发社区 Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。 开发工作量 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。 针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 2、系统调优对比Hibernate的调优方案 制定合理的缓存策略; 尽量使用延迟加载特性; 采用合理的Session管理机制; 使用批量抓取,设定合理的批处理参数(batch_size); 进行合理的O/R映射设计 Mybatis调优方案 MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制

mybatis和hibernate的特点

本秂侑毒 提交于 2020-02-23 07:28:59
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 mybatis 就会加快许多,而且语句的管理也比较方便。 第二方面:开发工作量的对比 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 第三方面:sql优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的

Java框架之Mybatis(二)

流过昼夜 提交于 2020-02-19 08:44:36
本文主要介绍 Mybatis(一)之后剩下的内容: 1 mybatis 中 log4j的配置 2 dao层的开发(使用mapper代理的方式) 3 mybatis的配置详解 4 输入输出映射对应的类型 ( parameterType 和 resultType ) 5 mybatis 动态 sql 6 mybatis 中的一级缓存 7 mybatis 中的二级缓存 8 mybatis 和 缓存框架的整合 9 mybatis 中二级缓存使用时注意的问题 10 mybatis 和 spring 整合 11 mybatis + spring mvc 一、mybatis 中 log4j 的配置 在 config 文件夹下,新建 log4j.properties ,其内容如下: 即可 log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql