日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate的缓存技术使用

發布時間:2024/4/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate的缓存技术使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

緩存技術

1 引入包,

1 <!-- 二級緩存ehcache --> 2 <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache --> 3 <dependency> 4 <groupId>net.sf.ehcache</groupId> 5 <artifactId>ehcache</artifactId> 6 <version>2.10.1</version> 7 </dependency> 8 <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-web --> 9 <dependency> 10 <groupId>net.sf.ehcache</groupId> 11 <artifactId>ehcache-web</artifactId> 12 <version>2.0.4</version> 13 </dependency> 14

注意版本的統一

2 配置hibernate方言為其開啟二級緩存,

1 hibernate.cache.use_second_level_cache=${hibernate.use_second_level_cache} 2 hibernate.cache.use_query_cache=${hibernate.use_query_cache} 3 hibernate.cache.provider_class=${hibernate.provider_class} 4 hibernate.cache.provider_configuration_file_resource_path=${hibernate.provider_configuration_file_resource_path}

再次查詢的時候如后沒有sql打印一定要檢查一下我們的日志是否是配置了sql的打印

還有那個緩存插件我們可以使用OSCache和ehcache等等hibernate默認使用的是ehcache

3 寫緩存文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <ehcache> 3 <!--如果緩存中的對象存儲超過指定的緩存數量的對象存儲的磁盤地址--> 4 <diskStore path="E:/ehcache"/> 5 6 <!-- 指定區域cache:通過name指定,name對應到Hibernate中的區域名即可--> 7 <cache name="SimplePageCachingFilter" 8 maxElementsInMemory="10000" 9 maxElementsOnDisk="1000" 10 eternal="false" 11 overflowToDisk="true" 12 timeToIdleSeconds="5" 13 timeToLiveSeconds="30" 14 memoryStoreEvictionPolicy="LFU"/> 15 16 <!-- 默認cache:如果沒有對應的特定區域的緩存,就使用默認緩存 --> 17 <!-- Ehcache 對象、數據緩存用以下配置 --> 18 <defaultCache maxElementsInMemory="10000" 19 eternal="false" 20 timeToIdleSeconds="120" 21 timeToLiveSeconds="120" 22 overflowToDisk="true" 23 diskSpoolBufferSizeMB="30" 24 maxElementsOnDisk="10000000" 25 diskPersistent="false" 26 diskExpiryThreadIntervalSeconds="120"/> 27 28 </ehcache> 29 <!-- 30 name:緩存名稱。 31 maxElementsInMemory:緩存最大個數。 32 eternal:對象是否永久有效,一但設置了,timeout將不起作用。 33 timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。 34 timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介于創建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。 35 overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。 36 diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。 37 maxElementsOnDisk:硬盤最大緩存個數。 38 diskPersistent:是否緩存虛擬機重啟期數據 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. 39 diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。 40 memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。 41 clearOnFlush:內存數量最大時是否清除。 42 -->

下面是測試代碼

package com.cache;import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.cache.entity.Permission; import com.cache.entity.UserInfo;@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:spring.xml", "classpath:spring-hibernate.xml"}) public class TestEvent {/*** 為什么在每次測試的時候都會去執行查詢語句,是應為每次都加在了配置文件,那么就相當于每次都從新啟動了服務*/@AutowiredHibernateTemplate hibernateTemplate;@AutowiredJdbcTemplate jdbcTemplate;public void testinsert() {// UserInfo userInfo = new UserInfo();// userInfo.setUserInfo_name("李四");// this.hibernateTemplate.save(userInfo);this.hibernateTemplate.setCacheQueries(true);/** 設置緩存區域的名稱查詢執行的這個模板。 如果這是指定的,它將適用于所有查詢和標準創建的對象這個模板(包括所有查詢通過查找方法)。* 的緩存區域不會生效,除非這個模板創建的查詢緩存配置通過“cacheQueries”屬性*/// 設置緩存使用那個區域,如果設置這個屬性那么一定要有setCacheQueries(true);// this.hibernateTemplate.setQueryCacheRegion("");List<UserInfo> userInfos = (List<UserInfo>) this.hibernateTemplate.find("from UserInfo");for (UserInfo userInfo2 : userInfos) {System.out.println(userInfo2.getUserInfo_name());}List<UserInfo> userInfos1 = (List<UserInfo>) this.hibernateTemplate.find("from UserInfo");for (UserInfo userInfo2 : userInfos1) {System.out.println(userInfo2.getUserInfo_name());}}public void testselect() {// Permission permission = new Permission();// permission.setPermission_name("admin");// this.hibernateTemplate.save(permission);List<Permission> permissions = (List<Permission>) this.hibernateTemplate.find("from Permission");for (Permission permissionlist : permissions) {System.out.println(permissionlist.getPermission_name());}List<Permission> permissions1 = (List<Permission>) this.hibernateTemplate.find("from Permission");for (Permission permissionlist : permissions1) {System.out.println(permissionlist.getPermission_name());}}public void testUserPage() {List<UserInfo> userInfos = this.hibernateTemplate.findByExample(new UserInfo(), 0, Integer.MAX_VALUE);for (UserInfo userInfo : userInfos) {System.out.println("id---->" + userInfo.getUserInfo_id());System.out.println("userNmae ---->" + userInfo.getUserInfo_name());}}/*** jdbcTemplate指定查詢字段測試成功*/public void testjdbcSelect() {String uuid = UUID.randomUUID().toString();this.jdbcTemplate.update("insert into userinfo (userinfo_id,userinfo_name) values (?,?)",new Object[] { uuid, "王立虎" });List<Map<String, Object>> userInfos = this.jdbcTemplate.queryForList("select userinfo_id,userinfo_name from UserInfo");for (Map<String, Object> userInfo : userInfos) {System.out.println(userInfo.get("userinfo_id"));System.out.println(userInfo.get("userinfo_name"));}}@Testpublic void testhibernateSelect() {@SuppressWarnings("unchecked")List<Object[]> userInfos =(List<Object[]>) this.hibernateTemplate.find("select u.userInfo_id,u.userInfo_name from UserInfo u");for (Object[] obj : userInfos) {System.out.println(obj[1]);}}}

以及日志的配置

log4j.rootLogger=INFO,Console,File log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n #log4j.appender.Console.layout = org.apache.log4j.SimpleLayout log4j.appender.File = org.apache.log4j.RollingFileAppender log4j.appender.File.File = logs/ssm.log log4j.appender.File.MaxFileSize = 10MB log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n #this is the most important config for showing parames like ? log4j.logger.org.hibernate.SQL=trace #log4j.logger.org.hibernate.type=trace #above two configs #log4j.logger.org.hibernate.tool.hbm2ddl=debug #log4j.logger.org.hibernate.hql=debug #log4j.logger.org.hibernate.cache=debug #log4j.logger.org.hibernate.transaction=debug #log4j.logger.org.hibernate.jdbc=debug #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

?

轉載于:https://www.cnblogs.com/holdouts/articles/5815574.html

總結

以上是生活随笔為你收集整理的hibernate的缓存技术使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。