使用IntelliJ IDEA開發(fā)SpringMVC網站(三)數據庫配置

六罐监、數據庫配置

下面,就要通過一個簡單的例子瞒爬,來介紹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ù)操作董栽。

參考鏈接:https://my.oschina.net/gaussik/blog/513444

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市企孩,隨后出現(xiàn)的幾起案子锭碳,更是在濱河造成了極大的恐慌,老刑警劉巖勿璃,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擒抛,死亡現(xiàn)場離奇詭異推汽,居然都是意外死亡,警方通過查閱死者的電腦和手機歧沪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門歹撒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诊胞,你說我怎么就攤上這事暖夭。” “怎么了撵孤?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵迈着,是天一觀的道長。 經常有香客問我邪码,道長裕菠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任霞扬,我火速辦了婚禮糕韧,結果婚禮上枫振,老公的妹妹穿的比我還像新娘喻圃。我一直安慰自己,他們只是感情好粪滤,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布斧拍。 她就那樣靜靜地躺著,像睡著了一般杖小。 火紅的嫁衣襯著肌膚如雪肆汹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天予权,我揣著相機與錄音昂勉,去河邊找鬼。 笑死扫腺,一個胖子當著我的面吹牛岗照,可吹牛的內容都是我干的。 我是一名探鬼主播笆环,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攒至,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了躁劣?” 一聲冷哼從身側響起迫吐,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎账忘,沒想到半個月后志膀,有當地人在樹林里發(fā)現(xiàn)了一具尸體熙宇,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年梧却,在試婚紗的時候發(fā)現(xiàn)自己被綠了奇颠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡放航,死狀恐怖烈拒,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情广鳍,我是刑警寧澤荆几,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏澎蛛。R本人自食惡果不足惜澳泵,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宙暇。 院中可真熱鬧,春花似錦、人聲如沸房维。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咙俩。三九已至,卻和暖如春湿故,著一層夾襖步出監(jiān)牢的瞬間阿趁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工坛猪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脖阵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓墅茉,卻偏偏與公主長得像命黔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子躁锁,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 轉載請注明出處:Gaussic(一個致力于AI研究卻不得不兼顧項目的研究生)纷铣。注:在閱讀本文前,請先閱讀:使用In...
    望月成三人閱讀 2,108評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理战转,服務發(fā)現(xiàn)搜立,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 因為這是你喜歡說心里話的地方颠通,雖然分開了址晕,所以我要走你走過的路,之前對你了解真的太少了顿锰。
    小憂傷XD閱讀 144評論 0 0
  • 我喜歡一個人認真的樣子硼控,就像一個姑娘坐在草地上埋頭看書刘陶,陽光灑在她素雅的衣裙上,微風輕輕拂過她的翩翩長發(fā)牢撼,令人念念...
    鴻飛老師閱讀 488評論 0 1