Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean

Spring和Hibernate整合的時候我們經常會有如下的配置代碼

1,非JPA支持的配置

<!-- 配置 Hibernate 的 SessionFactory 實例: 通過 Spring 提供的 LocalSessionFactoryBean 進行配置 -->

?? ?<!-- FacotryBean 配置的時候返回的不是本身而是返回的FactoryBean 的 getObject()方法返回的對象,此處是sessionFactory(Hibernate的類),用來創建session 進行數據庫操作 -->

?? 我們配置LocalSessionFactoryBean 得到的是LocalSessionFactoryBean?的getObject方法返回SessionFactory,SessionFactory用來創建session來進行數據庫的操作

?? ?<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
?? ??? ?<!-- 配置數據源屬性 -->
?? ??? ?<property name="dataSource" ref="dataSource"></property>
?? ??? ?<!-- 配置 hibernate 配置文件的位置及名稱 -->
?? ??? ?<!-- ?
?? ??? ?<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
?? ??? ?-->
?? ??? ?<!-- 使用 hibernateProperties 屬相來配置 Hibernate 原生的屬性 -->
?? ??? ?<property name="hibernateProperties">
?? ??? ??? ?<props>
?? ??? ??? ??? ?<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
?? ??? ??? ??? ?<prop key="hibernate.show_sql">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.format_sql">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.hbm2ddl.auto">update</prop>
?? ??? ??? ?</props>
?? ??? ?</property>
?? ?????<!-- 配置 hibernate 映射文件的位置及名稱, 可以使用通配符 -->
?? ?????<property name="mappingLocations"?

?? ??? ??? ?value="classpath:com/atguigu/spring/hibernate/entities/*.hbm.xml">

?????? </property>

?

?

????? ?<!-- 配置 hibernate 實體Bean的映射,如果缺少此項內容則不會創建表,創建表的過程是在生成容器的時候同時生成表 -->

?????? <和上邊配置xml類型的實體bean二選一就可以了>

???????<property name="annotatedClasses">
?? ??? ?? <list>
?? ??? ? ??? ??? ?<value>com.marshallee.entities.Account</value>
?? ??? ?? </list>
?? ??? ?</property>

?? ?</bean>

?

2,JPA支持的配置

同樣我們配置.LocalContainerEntityManagerFactoryBean得到的是.LocalContainerEntityManagerFactoryBean?的getObject方法返回EntityManagerFactory,EntityManagerFactory用來創建EntityManager來進行數據庫的操作

<bean id="entityManagerFactory"
?? ??? ?class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

?? ??? ?<property name="jpaVendorAdapter">
?? ??? ??? ?<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
?? ??? ??? ??? ?<property name="showSql" value="true" />
?? ??? ??? ??? ?<property name="generateDdl" value="true" />
?? ??? ??? ??? ?<property name="databasePlatform" value="${db.dialect}" />
?? ??? ??? ?</bean>
?? ??? ?</property>
?? ??? ?<property name="jpaProperties">
?? ??? ??? ?<props>
?? ??? ??? ??? ?<!-- base -->
?? ??? ??? ??? ?<prop key="hibernate.hbm2ddl.auto">update</prop>
?? ??? ??? ??? ?<prop key="hibernate.transaction.flush_before_completion">true</prop>
?? ??? ??? ??? ?<!-- show_sql -->
?? ??? ??? ??? ?<prop key="hibernate.show_sql">false</prop>
?? ??? ??? ??? ?<!-- cache -->
?? ??? ??? ??? ?<prop key="hibernate.cache.use_query_cache">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.cache.use_second_level_cache">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
?? ??? ??? ??? ?<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
?? ??? ??? ??? ?</prop>
?? ??? ??? ?</props>
?? ???? </property>
?? ?</bean>

?

?

“jpaVendorAdapter屬性用于指明所使用的是哪一個廠商的JPA實現。Spring提供了多個JPA廠商適配器:

EclipseLinkJpaVendorAdapter
HibernateJpaVendorAdapter
OpenJpaVendorAdapter
TopLinkJpaVendorAdapter(在Spring 3.1版本中,已經將其廢棄了)”

摘錄來自: [美] Craig Walls. “Spring實戰(第4版)”。 iBooks.?

?

只要記住一點當我們配置FactoryBean后,當調用getBean(beanName)的時候我們得到的是FactoryBean.getObject返回的對象,如果我們要得到FactoryBean本身則需要在調用getObject的時候加上引用'&' 如 ?getBean(&beanName)

這里涉及到FactoryBean?和BeanFactory?的區別參考:http://chenzehe.iteye.com/blog/1481476

?


容易混淆的地方

persistence.xml是JPA規范要求的,在應用程序管理類型的JPA中我們需要配置persistence.xml?中的數據源內容用PersistenceProvider來生成一個EntityManagerFactory,但是在“容器管理類型的JPA" 中?”當運行在容器中時,可以使用容器(在我們的場景下是Spring)提供的信息來生成EntityManagerFactory。你可以將數據源信息配置在Spring應用上下文中,而不是在persistence.xml中了,盡管數據源還可以在persistence.xml中進行配置,但是這個屬性指定的數據源具有更高的優先級.

綜上可以理解為如果我們選擇在spring上下文中配置數據源信息,則不需要再persistence.xml中配置了,即使配置了在容器類型的JPA中,容器會優先選擇容器上下文中的配置信息,但是persistence,xml這個文件還是必須要有的,可以是空的配置,但必須要有,這是JPA的要求,

轉載于:https://www.cnblogs.com/onlymate/p/7568572.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391325.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何通過建造餐廳來了解Scala差異

I understand that type variance is not fundamental to writing Scala code. Its been more or less a year since Ive been using Scala for my day-to-day job, and honestly, Ive never had to worry much about it. 我了解類型差異并不是編寫Scala代碼的基礎。 自從我在日…

linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow

1./etc/passwd 存儲用戶信息 [rootoldboy ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 一行記錄對應著一個用戶&#xff0c;每行記錄被冒號:分隔為7個字段&#xff0c;這7個字段的具體含…

組織在召喚:如何免費獲取一個js.org的二級域名

之前我是使用wangduanduan.github.io作為我的博客地址&#xff0c;后來覺得麻煩&#xff0c;有把博客關了。最近有想去折騰折騰。先看效果&#xff1a;wdd.js.org 如果你不了解js.org可以看看我的這篇文章:一個值得所有前端開發者關注的網站js.org 前提 已經有了github pages的…

linkedin爬蟲_您應該在LinkedIn上關注的8個人

linkedin爬蟲Finding great mentors are hard to come by these days. With so much information and so many opinions flooding the internet, finding an authority in a specific field can be quite tough.這些天很難找到優秀的導師。 互聯網上充斥著如此眾多的信息和眾多…

重學TCP協議(4) 三次握手

1. 三次握手 請求端&#xff08;通常稱為客戶&#xff09;發送一個 S Y N段指明客戶打算連接的服務器的端口&#xff0c;以及初始序號。這個S Y N段為報文段1。服務器發回包含服務器的初始序號的 S Y N報文段&#xff08;報文段2&#xff09;作為應答。同時&#xff0c;將確認序…

[設計模式]State模式

《Java與模式》 又稱狀態對象模式。狀態模式是對象的行為模式。GOF95 一個對象的行為取決于一個或者多個動態變化的屬性&#xff0c;這樣的屬性叫做狀態。這樣的對象叫做有狀態的對象&#xff08;stateful&#xff09;。 狀態模式把一個所研究的對象的行為包裝在不同的狀態對象…

java溫故筆記(二)java的數組HashMap、ConcurrentHashMap、ArrayList、LinkedList

為什么80%的碼農都做不了架構師&#xff1f;>>> HashMap 摘要 HashMap是Java程序員使用頻率最高的用于映射(鍵值對)處理的數據類型。隨著JDK&#xff08;Java Developmet Kit&#xff09;版本的更新&#xff0c;JDK1.8對HashMap底層的實現進行了優化&#xff0c;例…

前置交換機數據交換_我們的數據科學交換所

前置交換機數據交換The DNC Data Science team builds and manages dozens of models that support a broad range of campaign activities. Campaigns rely on these model scores to optimize contactability, volunteer recruitment, get-out-the-vote, and many other piec…

aws 彈性三劍客_AWS和彈性:超越用戶需求

aws 彈性三劍客I’ll assume that, one way or another, you’re already familiar with many of AWS’s core deployment services. That means you now know about:我假設您已經熟悉許多AWS的核心部署服務。 這意味著您現在知道&#xff1a; ? EC2 instances and AMIs (Ama…

leetcode 368. 最大整除子集(dp)

給你一個由 無重復 正整數組成的集合 nums &#xff0c;請你找出并返回其中最大的整除子集 answer &#xff0c;子集中每一元素對 (answer[i], answer[j]) 都應當滿足&#xff1a; answer[i] % answer[j] 0 &#xff0c;或 answer[j] % answer[i] 0 如果存在多個有效解子集&a…

在Centos中安裝mysql

下載mysql這里是通過安裝Yum源rpm包的方式安裝,所以第一步是先下載rpm包 1.打開Mysql官網 https://www.mysql.com/, 點擊如圖選中的按鈕 點擊如圖框選的按鈕 把頁面拉倒最下面,選擇對應版本下載,博主這里用的是CentOS7 下載完成后上傳到服務器,由于是yum源的安裝包,所以…

碩士可以跟別的導師做實驗嗎_如何成為一名導師可以成為雙刃劍

碩士可以跟別的導師做實驗嗎Mentoring is the ability to give advise or train someone, often times, who is less knowledgeable in a particular field. This is pretty much common place in tech companies. There you usually have senior developers who, besides bein…

linux中權限對文件和目錄的意義

1.權限對文件的意義&#xff1a; 讀&#xff1a;可查看文件的內容 寫&#xff1a;可修改文件的內容&#xff08;但不能刪除文件&#xff09; 執行&#xff1a;可執行文件 2.權限對目錄的意義&#xff1a; 讀&#xff1a;可以查看目錄下的內容&#xff0c;即可以讀取該目錄下的結…

Docker 入門(1)虛擬化和容器

1 虛擬化 虛擬化是為一些組件&#xff08;例如虛擬應用、服務器、存儲和網絡&#xff09;創建基于軟件的&#xff08;或虛擬&#xff09;表現形式的過程。它是降低所有規模企業的 IT 開銷&#xff0c;同時提高其效率和敏捷性的最有效方式。 1.1 虛擬化用于程序跨平臺兼容 要…

量子相干與量子糾纏_量子分類

量子相干與量子糾纏My goal here was to build a quantum deep neural network for classification tasks, but all the effort involved in calculating errors, updating weights, training a model, and so forth turned out to be completely unnecessary. The above circu…

三角函數式的化簡

前言 為什么需要化簡三角函數式&#xff1f; 一、什么是三角函數式的化簡&#xff1f; 二、三角函數式的化簡標準是什么&#xff1f; 三、三角函數式化簡可能用到的變形&#xff1a; 弦切互化&#xff0c;1的代換&#xff0c;通分約分&#xff0c;配方展開&#xff0c;提取公因…

Python -- xlrd,xlwt,xlutils 讀寫同一個Excel

最近開始學習python,想做做簡單的自動化測試&#xff0c;需要讀寫excel,然后就找到了xlrd來讀取Excel文件&#xff0c;使用xlwt來生成Excel文件&#xff08;可以控制Excel中單元格的格式&#xff09;&#xff0c;需要注意的是&#xff0c;用xlrd讀取excel是不能對其進行操作的&…

計算機工程師分級_這些是每個計算機工程師都應該知道的數字

計算機工程師分級In 2010, Jeff Dean from Google gave a wonderful talk at Stanford that made him quite famous. In it, he discussed a few numbers that are relevant to computing systems. Then Peter Norvig published those numbers for the first time on the inter…

leetcode 377. 組合總和 Ⅳ(dp)

給你一個由 不同 整數組成的數組 nums &#xff0c;和一個目標整數 target 。請你從 nums 中找出并返回總和為 target 的元素組合的個數。 題目數據保證答案符合 32 位整數范圍。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3], target 4 輸出&#xff1a;7 解釋&…

1.4- 定時任務總結之九句箴言

1.4定時任務之九句箴言九句箴言---- 不會九句箴言別做運維1.定時任務規則之前加注釋2.使用腳本代替命令行制定定時任務3.定時任務中date命令%的特殊含義定時任務中,%表示回車 -----可以使用\轉義4.運行腳本一定要用/bin/sh或sh腳本不必須有x權限5.定時任務中-命令或腳本的輸出…