1. JPA二級快取配置
JPA中的二級快取是在EntityManagerFactory中,但是默認EntityManagerFactory中的二級快取是沒有開啟的,如果需要開啟二級快取需要做如下配置:
注:在hibernate4.3.8中是默認開啟的二級快取,無需配置;
步驟如下:
① 匯入JPA二級快取的jar包;
Jar包目錄:
\hibernate-release-4.3.8.Final\lib\optional\ehcache\
ehcache-core-2.4.3.jar
hibernate-ehcache-4.3.8.Final.jar
slf4j-api-1.6.1.jar

② 對應在persistence.xml中添加如下配置:
<persistence 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" version="2.0"> <!--持久化單元 name:和專案名稱對應--> <persistence-unit name="cn.yif.jpa04" transaction-type="RESOURCE_LOCAL"> <!-- ALL:所有的物體類都被快取 --> <!-- NONE:所有的物體類都不被快取. --> <!-- ENABLE_SELECTIVE:標識 @Cacheable(true) 注解的物體類將被快取 --> <!-- DISABLE_SELECTIVE:快取除標識 @Cacheable(false) 以外的所有物體類 --> <!-- UNSPECIFIED:默認值,JPA 產品默認值將被使用 --> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> <!-- 必須配置4個連接資料庫屬性:配置資訊可以在project/etc/hibernate.properties中找到 --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql:///jpa04_0523" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="admin" /> <!-- 必須配置1個資料庫方言屬性 --> <!-- 實作跨資料庫關鍵類 :查詢MySQLDialect的getLimitString方法 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <!-- 可選配置 --> <!-- 是否自動生成表 --> <property name="hibernate.hbm2ddl.auto" value="validate" /> <!-- 是否顯示sql --> <property name="hibernate.show_sql" value="true" /> <!-- 格式化sql --> <!--<property name="hibernate.format_sql" value="https://www.cnblogs.com/yif0118/p/true" />--> <!-- hibernate.cache.use_second_level_cache:是否開啟二級快取 --> <property name="hibernate.cache.use_second_level_cache" value="true"/> <!-- hibernate.cache.region.factory_class :二級快取的方言(選擇的哪個工廠) org.hibernate.cache.internal.EhCacheRegionFactory:EhCache快取 比較尷尬的是:檔案上寫錯了 (org.hibernate.cache.ehcache.EhCacheRegionFactory) --> <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> <!-- hibernate.cache.use_query_cache:是否開啟查詢快取 注意:必需要開啟二級快取,查詢快取才能起作用 --> <property name="hibernate.cache.use_query_cache" value="true"/> </properties> </persistence-unit> </persistence>
③ 在對應的Entity類上加上注解:@Cacheable(true)
@Cacheable(true) @Entity public class Employee { @Id @GeneratedValue private Long id; private String name;
2. JPA集合快取配置
集合上面加上:@Cache(usage = CacheConcurrencyStrategy.READ_WRITE),就可以快取這個集合
@OneToMany(fetch = FetchType.LAZY, mappedBy = "department") @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) //注意:hibernate集合快取一般不用,不需要配置,配置完之后性能更差 //如果一定要配置集合快取,集合中的物件也一定要能夠放到快取中 private Set<Employee> employeeSet = new HashSet<Employee>();
3. JPA查詢快取配置
JPA查詢快取比較簡單,只需要加上query1.setHint(QueryHints.HINT_CACHEABLE, true)即可,
Query query1 = entityManager.createQuery("select o from Employee o where o.id = ?");
//把這個query1放到查詢快取中,也會到查詢快取中取
query1.setHint(QueryHints.HINT_CACHEABLE, true);
query1.setParameter(1, 1L);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183591.html
標籤:Java
上一篇:慕課網《二進制與Java中的基本資料型別》視頻學習筆記
下一篇:陣列
