JPA学习笔记-二级缓存
2015-10-30 10:58
225 查看
默认情况下开启一级缓存,如下
下面配置二级缓存
persistance.xml
加入ehcache相关jar包
ehcache-core-2.4.3.jar
hibernate-ehcache-4.3.5.Final.jar
slf4j-api-1.6.1.jar
加入ehcache.xml(hibernate-release-4.3.5.Final\project\etc目录下)
在实体类上加入Cacheable注解
测试
以上测试代码只会发送一条SQL查询语句。二级缓存启用成功。
本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1708005
@Test public void testSecondLevelCache() { User user = entityManager.find(User.class, 1); System.out.println("------------------");//只发送一条SQL查询语句 User user1 = entityManager.find(User.class, 1); }
@Test public void testSecondLevelCache() { User user = entityManager.find(User.class, 1); entityTransaction.commit(); entityManager.close(); System.out.println("------------------"); entityManager = entityManagerFactory.createEntityManager(); entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); User user1 = entityManager.find(User.class, 1); //发送两条查询语句 }
下面配置二级缓存
persistance.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="Jpa" transaction-type="RESOURCE_LOCAL"> <!-- 配置使用什么ORM产品来作为JPA的实现 1.实际上配置的是javx.persistance.spi.PersistanceProvider接口的实现类 2.若JPA项目中只有一个JPA的实现产品,也可以不配置该节点 --> <provider>org.hibernate.ejb.HibernatePersistence</provider> <!-- 添加持久化类 --> <class>com.jpa.beans.User</class> <!-- 配置二级缓存策略 --> <!-- ALL:所有的实体类都被缓存 NONE:所有的实体类都不被缓存. ENABLE_SELECTIVE:标识 @Cacheable(true) 注解的实体类将被缓存 DISABLE_SELECTIVE:缓存除标识 @Cacheable(false) 以外的所有实体类 UNSPECIFIED:默认值,JPA 产品默认值将被使用 --> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///test" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="" /> <!-- 配置JPA实现产品的基本属性,即Hibernate的基本属性 --> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <!-- 二级缓存相关 --> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> <property name="hibernate.cache.use_query_cache" value="true"/> </properties> </persistence-unit> </persistence>
加入ehcache相关jar包
ehcache-core-2.4.3.jar
hibernate-ehcache-4.3.5.Final.jar
slf4j-api-1.6.1.jar
加入ehcache.xml(hibernate-release-4.3.5.Final\project\etc目录下)
在实体类上加入Cacheable注解
@Cacheable(true) @Table(name = "jps_user") @Entity public class User { @GeneratedValue @Id private Integer id; private String username; private String password; //getter setter }
测试
@Test public void testSecondLevelCache() { User user = entityManager.find(User.class, 1); entityTransaction.commit(); entityManager.close(); System.out.println("------------------"); entityManager = entityManagerFactory.createEntityManager(); entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); User user1 = entityManager.find(User.class, 1); }
以上测试代码只会发送一条SQL查询语句。二级缓存启用成功。
本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1708005
相关文章推荐
- 如何把老旧笔记本变成一部 Chromebook
- 在iOS7中修改状态栏字体的颜色
- Java 悲观锁和乐观锁的实现
- TIPSO--基于JQUERY的消息提示框插件,用起来蛮顺手
- 金额计算
- Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
- Spring MVC+mybatis 环境搭建,总结
- Singleton单例设计模式
- sign、decode、numtodsinterval、numtoyminterval、substr
- iOS开发系列--通知与消息机制
- cygwin-安装断点续传
- iPhone 横屏变大和一些meta标签解释
- Java 按字节获得字符串(中文)长度
- Hdu 4507 吉哥系列故事——恨7不成妻 (数位DP)
- 顺序栈与栈链以及其应用
- Android6.0 新特性详解
- Linux环境下Nginx安装及Ubuntu Server 15.0.4尝试安装Nginx
- Linux下Tomcat的启动、关闭、杀死进程
- gen already exists but is not a source folder. Convert to a source folder or rename it.
- 解析:SaaS 2.0 时代之风起云涌