六罐监、數據庫配置
下面,就要通過一個簡單的例子瞒爬,來介紹SpringMVC如何集成Spring Data JPA(由 Hibernate JPA 提供)弓柱,來進行強大的數據庫訪問,并通過本章節(jié)的講解侧但,更加深刻地認識Controller是如何進行請求處理的矢空,相信看完這一章節(jié),你就可以開始你的開發(fā)工作了禀横。
準備工作:
在src\main\java中新建兩個包:com.gaussic.model屁药、com.gaussic.repository,將在后面用上柏锄,如下圖所示:
1酿箭、創(chuàng)建Mysql數據庫
本文的講解使用Mysql數據庫,如果使用其它數據庫的讀者趾娃,可以去網上參考其他的配置教程缭嫡,在此不做太多的敘述。數據庫是一個底層的東西抬闷,底層的細節(jié)對上層的抽象并沒有太大的影響妇蛀,因此,只要配置好數據庫笤成,本章的內容仍然是適用于所有數據庫的(貌似如此)评架。
假設我們現(xiàn)在要建立一個小小的博客系統(tǒng),其數據庫ER圖如下所示(當然這只是一個小小的例子炕泳,真實的博客系統(tǒng)比這要復雜的多):
新建一個數據庫springdemo古程,在數據庫中,有兩張表:
(1)用戶表user:用戶登錄信息喊崖,主鍵id設為自增挣磨;
(2)博文表blog:儲存用戶發(fā)表的博文,主鍵id設為自增荤懂,其中有一個外鍵user_id鏈接到user表茁裙。
詳細表結構如下圖所示:
使用MySQL Workbench添加外鍵流程:
注意:在添加外鍵時,應該根據需求設置节仿,例如右邊紅框中的Foreign Key Options晤锥,默認在Delete時是NO ACTION,說明在刪除一個用戶時,如果數據庫中存在該用戶的文章矾瘾,那么就無法刪除該用戶女轿,也無法刪除該用戶的所有文章,而如果將該選項改為CASCADE壕翩,那么刪除該用戶蛉迹,就會同時刪除該用戶所有的文章。通常后者是不太可取的放妈,因為如果發(fā)生了刪除用戶的誤操作北救,很有可能該用戶的內容被連帶刪除,且不可逆芜抒,這也是實現(xiàn)真實系統(tǒng)時需要考慮的原因之一珍策。
2、IntelliJ IDEA導入數據庫
對于此前所接觸的一些常用的框架中宅倒,一張數據表往往對應一個Java Bean攘宙。在SpringMVC中,這個Java Bean相當于model拐迁。那么模聋,這個類是否需要自己來寫呢?不需要唠亚,利用IntelliJ IDEA可以幫我們自動的生成這些JavaBean链方。
首先,右鍵項目灶搜,選擇Add Framework Support:
下拉選擇JavaEE Persistence祟蚀,右邊provider選擇Hibernate:
注:這一部分有一點過時,更新的項目中直接把數據庫的配置放在了mvc-dispatcher-servlet.xml中割卖,但依然要做這一步的操作前酿,為了這一步可以使用Persistence的工具。
關于新的配置鹏溯,可以翻到本頁底部罢维。
在這一步結束后,我們可以發(fā)現(xiàn)丙挽,在resources里面生成了persistence.xml配置文件肺孵,左邊欄出現(xiàn)了一個Persistence標題(若沒有請點擊左下角那個灰框):
persistemce.xml具體如下:
我們先不著急填寫這個配置文件。點開左邊欄的Persistence颜阐,顯示如下圖所示:
右鍵項目名平窘,選擇Generate Persistence Mapping,再選擇By Database Schema:
出現(xiàn)如下界面凳怨,其主要需要配置的地方如下圖紅框所示:
點擊Choose Data Source右邊的三個點選擇數據源瑰艘,在彈出的界面左上角選擇“+”是鬼,選擇Mysql:
在如下界面填寫主機、端口號紫新、數據庫名均蜜、用戶名、密碼芒率,如果驅動丟失點擊下面的Download可以下載驅動囤耳,點擊 Test Connection可以測試數據庫是否連接成功:
在以上界面配置完成后,點OK敲董,第一次使用需要Setup Master Password:(我的版本就沒出現(xiàn))
回到如下頁面,package填寫model包(1)慰安,勾選Prefer primitive type使用原始數據類型(2)腋寨,勾選Show default relationships以顯示所有數據庫關系(3),再點擊刷新按鈕(4)化焕,將會找到數據庫中的兩個表萄窜,勾選兩個數據表(5),再勾選Generate Column Defination以生成每一列的描述信息(6)撒桨。選中blog表然后點擊“+”號按鈕查刻,添加外鍵關系(7)。
點擊OK后凤类,在Database Schema Mapping中可以發(fā)現(xiàn)多出了兩個關系穗泵,如圖所示:
再點擊OK,稍后谜疤,打開model包佃延,可以看到生成了兩個Java Bean,在SpringMVC中稱為兩個實體夷磕,它們對應了數據庫的兩張表:
BlogEntity如下所示(注意把java.sql.Date改為java.util.Date):
再看UserEntity:
3履肃、配置數據庫
既然數據庫已經導入了,那么前期準備工作基本完成坐桩,還需要進行最終的配置尺棋。
首先,打開mvc-dispatcher-servlet.xml绵跷,添加下列配置(如果某些地方報錯膘螟,請選中并按Alt + Insert補全配置):
講解:
(1) jpa:repositories:這一部分涉及到數據庫的接口,將在后面詳解碾局;
(2)entityManagerFactory:實體管理器工廠萍鲸,讀取persistence.xml配置;
(3)transactionManager:事務管理器擦俐,利用entityManager進行事務管理脊阴;
(4)tx:annotation-driven:打開事務管理器的注解驅動,可以使用注解的方法操縱數據庫。
下面嘿期,填充persistence.xml品擎,將persistence-unit的name改為 defaultPersistenceUnit。在下面的文件中备徐,我添加了一些更為詳細的配置:
現(xiàn)在萄传,重新啟動tomcat,如果沒有報錯蜜猾,說明數據庫已經配置完成了秀菱,接下來就要講解數據庫的相關開發(fā)工作。
閱讀評論發(fā)現(xiàn)許多同學的persistence.xml出現(xiàn)了問題蹭睡,因為出現(xiàn)問題的原因可能有很多衍菱,如果沒有完全的報錯以及代碼的話,我這邊很難解決問題肩豁,一個辦法就是在GitHub Issues上面提問并貼出代碼脊串,我這邊盡量解答。另一個辦法就是下載最新的代碼運行看有沒有什么問題清钥。
最后一個辦法琼锋,嘗試另外一種配置方法,無需persistence.xml祟昭,直接在mvc-dispatcher-servlet.xml中配置數據庫缕坎,如下所示:
刪除persistence.xml,直接修改entityManagerFactory bean為如上圖所示篡悟。這個方法可以擺脫persistence.xml的困擾念赶,但是有一個小小的問題,如果之前沒有添加Java EE Persistence這個框架的恰力,文中的Persistence工具欄將不會顯示叉谜。一個解決辦法就是,先修改mvc-dispatcher-servlet踩萎,然后再添加Java EE Persistence框架停局,等能夠看到Persistence工具欄后,刪除persistence.xml香府,余下的步驟可以繼續(xù)操作董栽。