hibernatejpa二級緩存
㈠ Eclipse項目里沒有j2ee library這么辦
eclipse是客戶端開發工具,本來就不帶有j2ee的jar包,需要容器:比如tomcat來提供這個jar的。
j2EE通用jar包列表:
IKIKAnalyzer3.2.8.jar // 分詞器
ant-junit4.jar // ant junit
antlr-2.7.6.jar // 沒有此包,hibernate不會執行hql語句。並且會報NoClassDefFoundError: antlr/ANTLRException錯誤
aopalliance-1.0.jar // 這個包是AOP聯盟的API包,裡麵包含了針對面向切面的介面。通常Spring等其它具備動態織入功能的框架依賴此包。
asm-3.2.jar // spring3用到的asm 生成二進制代理類
asm-analysis-3.2.jar // ASM是一個通用的java位元組碼操作和分析框架。它可以用來修改現有的類或動態生成的類,直接以二進制的形式。提供常見的轉換和分析演算法允許輕松地組裝定製的復雜轉換和代碼分析工具。
asm-commons-3.2.jar //
asm-commons-3.3.jar //
asm-tree-3.2.jar //
asm-tree-3.3.jar //
asm-util-3.2.jar //
aspectjrt.jar // 面向切面編程 Spring
aspectjweaver.jar // 面向切面編程 Spring
backport-util-concurrent.jar // 並發訪問處理埠的工具包
bootstrapconnector.jar // 操作openoffice
c3p0-0.9.1.jar // C3P0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發布,包括了實現jdbc3和jdbc2擴展規范說明的Connection 和Statement 池的DataSources 對象。
cas-client-core-3.2.1.jar // 單點登錄客戶端
cglib-nodep-2.1_3.jar // cglib代理 實現AOP的一種方式;和他對應的是DynaProxy(java動態代理)
cglib-nodep-2.2.jar //
cobertura.jar // 跑cobertura測試的包
commons-beanutils-1.7.0.jar // 提供對 Java 反射和自省API的包裝
commons-codec-1.4.jar // Commons項目中用來處理常用的編碼方法的工具類包。編碼或者是解碼
commons-collections-3.1.jar // 提供一個類包來擴展和增加標準的 Java Collection框架
commons-collections-3.2.jar //
commons-dbcp-1.4.jar // 儲存java資料庫連接對象的池子
commons-dbcp.jar //
commons-email-1.2.jar // Java發郵件的包
commons-fileupload-1.2.1.jar // Java上傳文件用到的包
commons-fileupload-1.2.2.jar //
commons-io-1.3.2.jar // Java實現IO所需要的包
commons-io-2.0.1.jar //
commons-lang-2.3.jar // 提供了許多許多通用的工具類集,提供了一些java.lang中類的擴展功能
commons-lang-2.4.jar //
commons-lang3-3.1.jar //
commons-logging-1.1.1.jar // 一個各種 logging API實現的包裹類
commons-logging-api-1.1.jar // 是一個 LOGGING 的一個簡化版,只實現了SimpleLog 及類似的其它部分,只能基本滿足系統啟動時的日誌輸出,因為沒有日誌系統的API ,Tomcat 是不能啟動的
commons-pool-1.3.jar // 對象池
commons-pool.jar //
dom4j-1.6.1.jar // Java的XML API,類似於jdom,用來讀寫XML文件的
easymock-3.1.jar // Junit Test用,Mock對象
ehcache-core-2.4.4.jar // 高可用的緩存系統,純Java實現,支持本地緩存、分布式緩存和緩存查詢,是hibernate默認的二級緩存。
ezmorph-1.0.3.jar // 簡單的java類庫用於將一種對象轉換成另外一種對象
fluent-hc-4.2.1.jar // HttpClient
freemarker-2.3.15.jar // 用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XML,JSP或Java 等。
freemarker-2.3.19.jar //
geronimo-jms_1.1_spec-1.0.1.jar // Apache Geronimo所帶jar包。 Apache伺服器用。
geronimo-jpa_3.0_spec-1.0.jar // Apache Geronimo所帶jar包
groovy-1.8.6.jar // 是Java平台上設計的面向對象編程語言,可以作為Java 平台的腳本語言使用。
gson-2.2.2.jar // 用來序列化json格式的數據
hamcrest-all-1.1.jar // 輔助測試工具 assertThat
hibernate-annotations.jar // Hibernate 註解
hibernate-commons-annotations-3.2.0.Final.jar //
hibernate-commons-annotations.jar //
hibernate-core-3.6.0.Final.jar // Hibernate核心包
hibernate-jpa-2.0-api-1.0.0.Final.jar // Hibernate 持久化
hibernate-search-3.3.0.Final.jar // Hibernate search
hibernate3.jar // 核心包
httpclient-4.2.1.jar //
httpcore-4.2.1.jar //
iaphelper-v1.5.jar //
jackson-all-1.8.0.jar // 解析json格式數據
jackson-all-1.8.2.jar //
jakarta-oro-2.0.8.jar // 正則表達式
java_uno.jar // openoffice
javassist-3.11.0.GA.jar // 分析、編輯和創建Java位元組碼的類庫
javassist-3.9.0.GA.jar //
jaxen-1.1.1.jar // 開源的XPath庫
jcommon-1.0.17.jar // Used for jFreeChart
jfreechart-1.0.14.jar // jfreechart
json-lib-2.1.jar // 解析json
json.jar //
jta-1.1.jar // Java Transaction API
juh.jar // 和jurt.jar unoil 轉換pdf文檔
junit-4.10.jar // junit
junit-4.8.2.jar //
jurt.jar //
jxl.jar // 操作excel
livetribe-jsr223-2.0.6.jar // jsr223是把其它腳本語言嵌入JAVA的一個規范,這個JAR包是對這個規范的實現
log4j-1.2.14.jar // 日誌
log4j-1.2.15.jar //
lucene-core-3.0.3.jar // lucene核心包
mail-1.4.1.jar // 郵件
mybatis-3.1.1.jar // mybatis持久化框架
mysql-connector-java-3.1.12-bin.jar // mysql連接
mysql-connector-java-5.0.4-bin.jar //
ognl-2.7.3.jar // Object-Graph Navigation Language, struts用
ognl-3.0.5.jar //
openjpa-1.2.2.jar // open jpa
org.springframework.aop-3.1.1.RELEASE.jar // Spring
org.springframework.asm-3.1.1.RELEASE.jar //
org.springframework.aspects-3.1.1.RELEASE.jar //
org.springframework.beans-3.1.1.RELEASE.jar //
org.springframework.context-3.1.1.RELEASE.jar //
org.springframework.context.support-3.1.1.RELEASE.jar //
org.springframework.core-3.1.1.RELEASE.jar //
org.springframework.expression-3.1.1.RELEASE.jar //
org.springframework.instrument-3.1.1.RELEASE.jar //
org.springframework.instrument.tomcat-3.1.1.RELEASE.jar //
org.springframework.jdbc-3.1.1.RELEASE.jar //
org.springframework.jms-3.1.1.RELEASE.jar //
org.springframework.orm-3.1.1.RELEASE.jar //
org.springframework.oxm-3.1.1.RELEASE.jar //
org.springframework.test-3.0.1.RELEASE-A.jar //
org.springframework.transaction-3.1.1.RELEASE.jar //
org.springframework.web-3.1.1.RELEASE.jar //
org.springframework.web.portlet-3.1.1.RELEASE.jar //
org.springframework.web.servlet-3.1.1.RELEASE.jar //
org.springframework.web.struts-3.1.1.RELEASE.jar //
persistence-api-1.0.jar // Java持久化
pmd-4.3.jar // 開源分析Java代碼錯誤的工具
quartz-all-1.6.0.jar // Spring quartz定時器
ridl.jar // open office
serp-1.13.1.jar // open jpa
slf4j-api-1.5.8.jar // hibernate
slf4j-log4j12-1.5.6.jar //
sonar-ant-task-1.4.jar //
spring-aop-3.1.2.RELEASE.jar // spring
spring-asm-3.1.2.RELEASE.jar //
spring-beans-3.1.2.RELEASE.jar //
spring-context-3.1.2.RELEASE.jar //
spring-core-3.1.2.RELEASE.jar //
spring-expression-3.1.2.RELEASE.jar //
spring-jdbc-3.1.2.RELEASE.jar //
spring-orm-3.1.2.RELEASE.jar //
spring-test-2.5.6.jar //
spring-test-3.1.2.RELEASE.jar //
㈡ 使用hibernate的11大優勢
Hibernate在解決性能問題方面做得非常好 有了它的緩存機制 使用第三方緩存和資料庫連接池 就較好的解決的性能問題 但這些還不夠 hibernate給了開發者足夠的自由 讓開發者自己去控制性能問題
學習了一段時間的ibatis 我覺得hibernate有著ibatis無法替代的優勢
開發者都知道 hibernate讓我們以oo的方式操作資料庫 這讓我們看到了hibernate的強大之處 體驗到操作數據的方便 但Gavin King說 hibernate最耀眼之處是hibernate的緩存機制 而不是以oo的方式操作資料庫 Hibernate的緩存機制不外乎是一級緩存session 二級緩存sessionFactory 和第三方緩存如ehcache 也就是hibernate的最強大的地方是它的緩存 理解了這個才能真正的理解hibernate 緩存實在太難了 我至今未能真正理解
可維護性 ibatis宣揚寫sql語句 它將sql語句放進一個單獨的xml文件 這種方式贏得了很多開發者的喜愛 一句話 方便維護 但hibernate同樣具有這種功能 而且比ibatis更加強大 Hibernate的命名查詢/命名參數查詢 就是將hql語句放在一個單獨的xml文件之中 它仍然讓人們以面向對象的方式去操縱數據 這得到大量遵循oo方式開發者的喜愛 而不用在以oo的方式寫著代碼的同時 然後再轉變思維 用面向關系的方式去寫那些sql語句 但hibernate不僅做了這些 它的native sql查詢方式 完全滿足sql語句的偏愛者 它像ibatis一樣 將sql語句放在配置文件之中
性能 我堅信 hibernate性能問題不是問題 想想那麼多大中小項目都在使用hibernate 你還懷疑hibernate的性能嗎?spring整合hibernate之後 在真正性能瓶頸的地方 完全可以使用spring集成的jdbc 或直接寫存儲過程得了 但首先得確認 這實在是性能瓶頸的地方 我想 不應想當然的認為性能的問題 所謂的性能問題阻撓了很多人
我認為 性能的好壞無外是發送sql語句的多少而已 性能好 發送的sql語句少 性能差 就是發送大量的sql語句 Hibernate在解決性能問題方面做得非常好
有了它的緩存機制 使用第三方緩存和資料庫連接池 就較好的解決的性能問題
但這些還不夠 hibernate給了開發者足夠的自由 讓開發者自己去控制性能問題
我認為開發者可以在以下幾個方面自行調優
a 在查詢字元串中 應該總是使用jdbc的佔位符? 或使用使用命名參數 不要自查詢中使用字元串值來代替非常量值
b Flush會影響性能 頻繁刷新影響性能 盡量減少不必要的刷新
c Cascade策略 在幾對幾的關系 正確設置cascade策略 想清楚在操作對象A的同時是否需要級聯操作對象B 比如在one to many的父子關系中 刪除了父親one 需級聯刪除子many 這時的one這端可設置cascade = delete 這樣在刪除one時 會自動刪除子 但對子的操作不會影響父 Cascade還有其他的屬性值 只要設置正確 可提升性能
d lazy策略 正確設置延遲載入策略同樣會提升性能 在one to many或many to many中 通常總應該延遲載入many的一方的到內存 設置了lazy = true 首先發送sql語句 載入自己到內存 到需要時才載入級聯對象 lazy= false 則會同時載入自己和級聯對象到內存
e 另外還有集合的性能(set list map array) 都應正確設置
f 正確使用第三方緩存 在讀操作頻繁寫操作不多的情況 使用第三方緩存可大幅度提升性能 如ehcache的緩存策略有 read only read write和notstrict read write
f 隨著hibernate新版本的發布 和技術的發展 我相信hibernate的性能會越來越好 所有性能不是不使用hibernate的原因
hibernate不僅僅作為持久層的orm框架存在 它除了層的持久化操作外 還有很多
在註解annotation已經走向主流的今天 hibernate 迅速響應 讓xml部署描述符成為可選的 Hibernate annotation 對大欄位的處理只是一個@Lob就搞定了
hibernate search對Lucene進行了輕量級的封裝 全文檢索變得非常簡單
Hibernate validator被認為是最合理的驗證方式 將驗證策略直接附在貫穿各層的領域模型domain上 不再需要哪些web框架的xml方式的驗證 代碼中不再出現大量的非空/null的判斷
jbpm Jbpm業務流程引擎的持久層採用hibenrnate來實現 要想使用jbpm hibernate是必須的 我想 業務流程管理無比重要 在soa迅速發展的今天 如果實施soa項目 業務流程管理是必然和必須的 因為soa就是業務和it技術的融合 是業務流程管理和it基礎架構的融合 在soa中 業務管理是第一位的 這需要相應的技術來實現該業務流程管理 開源領域的jbpm我想會是首選 所以 為了將來有可能實施soa項目 為了實現soa的業務流程管理 應該使用hibernate
大家都知道 hibernate將ejb 時代的實體bean趕進了歷史 而ejb 的jpa標准也只不過是hibernate的子集而已 jsr規范請求的威力是巨大的 沒有各種jsr規范請求 就不會有各種應用程序框架 各種應用程序框架只是那些jsr規范請求的實現者 jpa作為持久層的規范標准 引導持久層orm框架的方向 jpa同樣以面向對象的方式操作資料庫 而不是寫sql語句 規范標准都完全orm 不寫sql了 你還有理由不跟著它嗎?
Spring+hibernate+范型+可變參數 這是一個非常強大的組合 對應普通的crud操作 你不再需要重復寫那些煩人的相似的層和manager層的代碼 僅僅需要寫一次 就完成了所有大量的crud操作 Ibatis盡管也支持范型 但始終沒有hibernate支持的好
Jboss hibernate是jboss的項目 jboss的所有項目的持久層都採用的hibernate 要知道 jsr規范組的專家們大多數是來自jboss的 在一定程度上說 jboo引領著java的發展方向 使用hibernate 跟著jboss 不偏離java的發展方向
Gavin King 我最崇拜的偶像 他不僅發明了強大的hibernate 還搞出了同樣強大且優雅的web 應用程序框架seam 他是ejb 專家組成員之一 是jpa規范請求的領導者 他java領域最有發言權 最權威的領袖人物之一 現在 他領導web bean的 jsr 的發展 web bean規范的制定 全球軟體巨頭如ibm oracle bea和apache沒有一個反對 紛紛響應 Web bean 想像起來 實在太美好了 完全的松耦合和強類型 所有的應用組件生活在一個應用組件上下文context中 相互合作 那時將不再有各種各樣的上下文環境 不再有struts 的ActionContext 不再有spring的ApplicationContext 不再有hibernate的session 不再有持久化上下文 不再有事務上下文 不再有安全上下文 所有組件生活在一個大家庭中 大家其樂融融 實現天下的大和平
osgi 我認為現在最值得學習的一個技術 有了osgi 實現真正的多模塊開發 改變傳統的開發方式 現在 已經有了hibernate osgi spring dynamic mol(osgi) struts 同樣實現了對osgi的支持 目前 eclipse是基於osgi開發的 ibm的websphere v bea的所有產品都重構在osgi上 spring的應用伺服器同樣基於osgi 在EclipseCon 上 osgi成為了主要的話題 Osgi受到如此的待遇 一點不奇怪 因為他具有無比強大的功能 改變傳統的軟體開發方式 Osgi採用樹設計模式 將一個項目分成多個模塊(bundle) 每個模塊單獨部署 單獨運行 說白了 就是將一個工程分成許多的插件 每個插件單獨開發 重復使用 實現完全的即插即用 太令人激動了 如果公司的軟體開發基於osgi 將會有大量的重復使用的osgi bundles 公司將會積累大量的無形資產 軟體開發將會越來越快 而ibatis現在還沒見到對osgi的支持
hibernate的社區非常繁榮 ibatis則相對平靜
綜述 hibernate還有很多優秀的特點 只是我們不知道 Hibernate與ibatis 就像大家閨秀對小家碧玉 大家閨秀不僅具有小家碧玉的全部 而且知名度更高 更受尊敬 更受人追捧 更有發展前途 小家碧玉盡管也很有魅力 但始終比上大家閨秀
Hibernate所做的不僅僅是層的持久化工作 而ibatis恰恰如此
選擇hibernate 選擇orm的王者 選擇更全面的工作體驗 選擇更高效的工作方式 選擇更多的利潤 選擇Gavin King 跟著領袖走 選擇jboss 追隨開源的潮流 不偏離java的發展方向
lishixin/Article/program/Java/ky/201311/28357
㈢ Redis作為Hibernate的二級緩存問題,怎麼解決
<!-- entityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa."
depends-on="cacheManagerFactory">
...
<property name="jpaProperties">
<props>
...
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<!-- <prop key="hibernate.cache.use_query_cache">true</prop> -->
<prop key="hibernate.cache.region.factory_class">xxx.xxx.framework.cache.hibernate.CacheRegionFactory</prop>
...
</props>
</property>
</bean>
<!
㈣ 學習Java的最佳路線
首先先搞懂JavaSE的部分,Swing和swt部分就可以少看或不看,因為現在用的比較少。重點是看懂Java中的面向對象、集合框架、JDBC、異常、IO、線程和網路編程。JavaSE搞定後再學習Servlet、JSP,然後才是經典的Struts2、Hibernate和Spring,學習框架時重點理解框架的運行原理,甚至可以嘗試自己寫個輕量級的框架。理解運行原理的最好方法就是閱讀源代碼,還是要感謝Java中的開源項目。這期間還要多找各種大小的項目去完成,不一定要大,但是要精緻,功能要完整,這樣可以練習所學知識,並且可以在做項目中發現自己的知識體系中不足的地方。關於看視頻,我不推薦,很多同學一天到晚就知道看視頻,殊不知,編程真理在於「練習,練習,不停練習」!
推薦看看這個學習路線,規劃的很棒:

再補充下:當學習Java的期間,會碰到各種各樣的異常,請積累這些異常信息,以及如何出現的異常和如何處理的,因為java中常見的異常就那麼幾種,積累的多了,處理問題的能力就提高,這樣水平會提高的很快!
SpringMVC 這幾年的佔有率迅速的提高,可能之後會取代 Struts2,但是無論怎麼變化,這些還都是 MVC 模式,理解了這個模式,上手任何的MVC框架都應該很快。
企業需要的變化還體現在大數據方面,因為 Hadoop 的流行,Java 的應用場景又多了一個。所以,不喜歡 web 的可以考慮學習大數據方面的知識。
另一個流行的場景自然就是 Android,學習 Android 依然需要你有 JavaSE 的底子+HTTP 協議的理解,再配合上 Linux 的知識就可以開始了。
再說下找項目的問題,初學者可能會碰到不知道做什麼的問題,其實最開始大家都是從模仿開始的,例如你學會了 jsp+Servlet,那就可以模仿一個 v2ex 這樣的論壇出來。學會了 SpringMVC,那就試著將論壇的代碼重構,提供restful介面供客戶端訪問(Android、IOS 、web 等)。論壇做的沒難度了,那就模仿一個團購網站,依然是不一定要做全部的功能,但是做出的功能要穩定,要精緻。或者一個微信公眾平台的開發都是不錯的項目。
初學者看源代碼有的人推薦看 Struts2、spring 的,但是我相信10個初學者9個看不懂,那就從簡單的開始,例如 Apache 的 Commons 庫,例如 lang、dbutils、io 等,這些都是非常不錯的代碼,類的數量不多而且質量也不錯,這些看懂之後,你的基礎水平增長的不是一點點。
再次提醒初學者,學習編程沒有你想的那麼簡單,必須要多練習,多思考,最主要的是你對這個有興趣。現在不少網站和媒體都宣傳1個月學會前端、3個月入職 BAT 的口號,那也就是口號而已,別太認真。這條路沒有捷徑,寫你的代碼就是了!
㈤ Java培訓班的課程一般都學習什麼內容呢
階段一-微服務課程免費下載
鏈接:https://pan..com/s/191cR1oZ_elMd8y1TyHg0rA
微服務是對於微信公眾平台提供的輔助管理平台,強化了微信公眾號的互動營銷推廣與客戶關系維護功能。微服務平台開發了為商家定製的「個性化管理、營銷推廣、客戶關系管理、會員卡管理」等幾個重要的運營管理模塊。
㈥ 為什麼要使用hibernate
說說我們的選擇吧
原因有:
1. 我們是做平台的,客戶要求多種多樣,我們是需要支持多個資料庫的,Hibernate可以比較容易屏蔽資料庫的差異;
2. Hibernate採用面向對象的方式來寫SQL,也就是HQL和Criteria,在資料庫和Dao之間多了一層,資料庫的改動可以通過映射關系屏蔽部分影響。
3. 因為我們是要不斷的增加功能,偶然要做做系統重構,快速快發尤其重要,Hibernate的代碼量和改動量都要比其他框架來的少,起碼經過我們的封裝已經使得用起來是很簡單了。
4. 對於性能有影響的地方和很難用Hibernate表達的地方我們會採用JdbcTemplate,或者採用View封裝一次再map到Hibernate,採用Hibernate也不排斥其他持久層框架的存在。
5. 盡量少用One to many, Many to one等功能,可能這里不太OO,但是代碼明了,不容易出問題。
6. 我們暫時還沒有遇到幾千萬的數據量那麼大的客戶,要做到那麼大數據量的時候也可以從資料庫,系統,網路各個方面來優化。系統推到重來也不是什麼問題。
7.Hibernate的一級緩存對於長Transaction的業務復雜的代碼反而有好處,見上面的某些分析。
8. 採用緩存和靜態頁面可以消除部分性能影響,或者採用資料庫特有功能,不過取消Hibernate的二級緩存,採用Spring的緩存或者自己搞緩存。
9. 文檔多,容易解決問題,也是JPA標準的重要參考。
Hibernate不好的地方:
1. 多佔內存,因為他需要把domain對應的configuration都load到內存裡面去,多用內存是正常的,但是出現OutofMemerey肯定不是Hibernate的問題了,一般應用內存還是夠的。
2. 性能問題。Hibernate或者Ibatis也好,最終都是通過反射把ResultSet變為對應的Domain Object,跟了一下Hibernate的內部代碼,好像是用Method.invoke來調用get 和set方法的,用了Cglib或者動態代理方式,這個方式肯定是要比直接調用get和set方法要慢的。在JDK不斷優化的今天,這個差距應該會縮小。 但是Ibatais應該也是通過這個方式來做,沒有看過不太肯定。Hibernate多了一個將HQL或者Domain Object轉化為SQL的過程,這個過程也會消耗一些性能,例如字元串拼接,記錄Domain Object的關系等。
經過以上分析,可能Hibernate會給我帶來一定的性能損失,但是我可以通過其他辦法來彌補,內存就更不是問題了。但是他確實帶來了比較好的地方,因此我們會繼續用Hibernate。
所以說Hibernate適合做企業級應用,對於那種內存和性能要求都很高或者本來就用Ibatis的情況,其實可以選擇Ibatias或者JdbcTemplate的。就性能而言,
JdbcTemplate > Ibatis < Hibernate
除了緩存的作用外只說DB操作,純JDBC是最快的,因為那樣沒有任何負擔,但是代碼搞得很難看,你會這么選擇嗎?
㈦ spring3.2.2+hibernate 怎麼集成ehcache
spring boot集成ehcache 2.x 用於hibernate二級緩存
spring boot集成ehcache 2x 用於hibernate二級緩存
項目依賴
Ehcache簡介
hibernate二級緩存配置
ehcache配置文件
ehcache事件監聽
註解方式使用二級緩存
完整代碼
本文將介紹如何在spring boot中集成ehcache作為hibernate的二級緩存。各個框架版本如下
spring boot:1.4.3.RELEASE
spring framework: 4.3.5.RELEASE
hibernate:5.0.1.Final(spring-boot-starter-data-jpa默認依賴)
ehcache:2.10.3
項目依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<exclusions>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.3</version>
</dependency>
Ehcache簡介
ehcache是一個純Java的緩存框架,既可以當做一個通用緩存使用,也可以作為將其作為hibernate的二級緩存使用。緩存數據可選擇如下三種存儲方案
MemoryStore – On-heap memory used to hold cache elements. This tier is subject to Java garbage collection.
OffHeapStore – Provides overflow capacity to the MemoryStore. Limited in size only by available RAM. Not subject to Java garbage collection (GC). Available only with Terracotta BigMemory procts.
DiskStore – Backs up in-memory cache elements and provides overflow capacity to the other tiers.
hibernate二級緩存配置
hibernate的二級緩存支持entity和query層面的緩存,org.hibernate.cache.spi.RegionFactory各類可插拔的緩存提供商與hibernate的集成。
# 打開hibernate統計信息
spring.jpa.properties.hibernate.generate_statistics=true
# 打開二級緩存
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
# 打開查詢緩存
spring.jpa.properties.hibernate.cache.use_query_cache=true
# 指定緩存provider
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
# 配置shared-cache-mode
spring.jpa.properties.javax.persistence.sharedCache.mode=ENABLE_SELECTIVE
關於hibernate緩存相關的所有配置可參考hibernate5.0官方文檔#緩存
ehcache配置文件
ehcache 2.x配置文件樣板參考官方網站提供的ehcache.xml。本例中使用的配置文件如下所示
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.ehcache.org/ehcache.xsd"
updateCheck="true" monitoring="autodetect"
dynamicConfig="true">
<diskStore path="user.dir/cache"/>
<transactionManagerLookup class="net.sf.ehcache.transaction.manager."
properties="jndiName=java:/TransactionManager" propertySeparator=";"/>
< class="com.yangyi.base.ehcache." properties=""/>
<defaultCache
maxEntriesLocalHeap="0"
eternal="false"
timeToIdleSeconds="1200"
timeToLiveSeconds="1200">
<!--<terracotta/>-->
</defaultCache>
<cache name="entityCache"
maxEntriesLocalHeap="1000"
maxEntriesLocalDisk="10000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="10"
timeToLiveSeconds="20"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap"/>
<cacheEventListenerFactory class="com.yangyi.base.ehcache." />
</cache>
<cache name="org.hibernate.cache.internal.StandardQueryCache"
maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120">
<persistence strategy="localTempSwap" />
<cacheEventListenerFactory class="com.yangyi.base.ehcache." />
</cache>
<cache name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxEntriesLocalHeap="5000" eternal="true">
<persistence strategy="localTempSwap" />
<cacheEventListenerFactory class="com.yangyi.base.ehcache." />
</cache>
</ehcache>
註解方式使用二級緩存
要使用entity cache,需要在entity上配上相應的註解方可生效。javax.persistence.Cacheable註解標記該entity使用二級緩存,org.hibernate.annotations.Cache註解指定緩存策略,以及存放到哪個緩存區域。
有關緩存策略詳細信息可參考hibernate5.0官方文檔#緩存
package com.yangyi.entity;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.JoinTable;
@Entity
@Table(name = "users")
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "entityCache")
public class User implements Serializable {
}
最後,我們需要在spring boot應用層面打開cache功能,使用org.springframework.cache.annotation.EnableCaching註解
package com.yangyi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
完整代碼
完整代碼示例見github spring-boot-ehcache2.x-hibernate-second-level-cache
㈧ java培訓的學費價格大約是多少
現在的編程培訓分線上培訓和線下學習,現在不同的機構有不同的收費標准,看你選擇怎麼樣的培訓機構,如今的編程培訓機構良莠不齊,所以在選擇的時候要細細斟酌。
據了解,現在的編程培訓學費一般在15000—20000之間,教學質量有好有壞,俗話說便宜無好貨,但是也不能以偏概全,也有實惠又實在的培訓機構存在,也不是說學費越貴的教學質量一定好,但是貴也一定有它的道理。
不了解你的個人情況(學歷,專業,年齡,是否有基礎,之前的工作經驗,家庭經濟情況),這些因素都是你選擇機構需要考慮的因素。
只能給出一些建議供你參考:
1、年齡過大或者學歷太低,都不建議學。 可以作為興趣,先進行自學,看是否能夠持續下去。
2、家庭經濟情況不允許,可以選擇免費的視頻進行學習。或者是線上的教學服務。 性價比更高。
3、個人的成功多數情況下來源於個人的努力奮斗, 好的機構只是提供好的老師和環境,更好地服務於你,提高你的學習效率。 如果你自己三天打魚兩天曬網, 沒有實力任何一家企業都不會招聘這樣的員工。
4、選擇機構,可以多家對比,實地考察(通過試聽課,視頻課等多方面)
希望我的建議對您有用,望採納!!
㈨ java培訓課程內容是什麼java培訓課程學什麼
㈩ hibernate4.0+版本和3.0+版本的區別總結
1.使用hibernate.properties配置文件
以下配置的信息可以不用寫在傳統的hibernate.cfg.xml中了,可以寫在hibernate.properties配置文件中。
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/hibernate
hibernate.connection.password=root
hibernate.connection.username=root
hibernate.connection.pool_size=100
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.format_sql=true
其中在3.3+版本中連接MySQL資料庫只需要指明MySQLDialect即可。在4.1+版本中可以指出MySQL5Dialect。
2.SessionFactory對象的buildSessionFactory方法
4.1+版本中不帶參數的buildSessionFactory()已經被廢除,取而代之的是buildSessionFactory(ServiceRegistry ServiceRegistry)
為此我們採用以下方法:
public class HibernateTest {
private static SessionFactory sf = null;
@BeforeClass
public static void beforeClass(){
Configuration cfg = new Configuration().configure();
ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
//默認讀取hibernate.properties裡面的配置信息
sf = cfg.buildSessionFactory(srb.buildServiceRegistry());
}
@AfterClass
public static void afterClass(){
sf.close();
}
這里有兩點需要注意
1)若使用XML配置文件的方式配置實體類:需要在代碼中手動加入resource文件
(在hibernate.cfg.xml中配置已經無效<mapping resource="cn/ntt/china/model/Student.hbm.xml"/>)
例:cfg.addResource("cn/ntt/china/model/Student.hbm.xml");//須指明全路徑
2)若使用註解方式:與原來3.3+版本一樣在需要在hibernate.cfg.xml中加入配置即可
例:<mapping class="cn.ntt.china.model.Teacher"/>
另外org.hibernate.cfg.AnnotationConfiguration;(Deprecated. All functionality has been moved to Configuration)
這個註解讀取配置的class已經廢棄,現在讀取配置不需要特別註明是註解。
為了適應JPA規范,Hibernate4.1+版本中推薦使用annotation配置。
所以在引進jar包時把requested裡面的包全部引進來就已經包含了annotation必須包了。
3.二級緩存配置
原來3.3+:
<property name="cache.use_query_cache">true</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
現在4.1+:
<property name="cache.use_query_cache">true</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
Hibernate學到現在算到告一段落。現在回想下Hibernate的核心思想其實就是把資料庫中表與表的關系的操作,轉化封裝為java對象與對象的操作!那為什麼要這樣做呢?
原因很簡單這樣做符合我們日常面向對象編程的習慣,並且簡化持久層操作的代碼。
sun為這個思想制定了一套規范,即JPA!可見在不久的將來Java持久化操作要被JPA統一。
