近段時間學(xué)習(xí)了mybatis和spring。那么我們需要通過實(shí)踐來認(rèn)證自己的知識掌握度雹顺。當(dāng)然也是說一種自己對于數(shù)據(jù)持久層的開發(fā)想法停团。
準(zhǔn)備工作
所使用到的工具:
1 idea 2018.1.1
2 Navicat premium 12
3 mysql 5.6 64位
4 powerdesigner16.5 64位
5 ODBC 64位
所使用到的包:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
數(shù)據(jù)庫設(shè)計
首先我們需要根據(jù)系統(tǒng)需求來設(shè)計我們的數(shù)據(jù)医男。我根據(jù)自己的系統(tǒng)需求設(shè)計的數(shù)據(jù)庫随闪。我使用powerdesigner做概念數(shù)據(jù)模型(CDM) 和物理數(shù)據(jù)模型(PDM) 。
概念數(shù)據(jù)模型注意的點(diǎn)
1.概念數(shù)據(jù)模型里面什么該寫闷堡?什么不該寫隘膘?
百度百科給的定義:概念模型表征了待解釋的系統(tǒng)的學(xué)科共享知識。為了把現(xiàn)實(shí)世界中的具體事物抽象杠览、組織為某一數(shù)據(jù)庫管理系統(tǒng)支持的數(shù)據(jù)模型弯菊,人們常常首先將現(xiàn)實(shí)世界抽象為信息世界,然后將信息世界轉(zhuǎn)換為機(jī)器世界踱阿。也就是說管钳,首先把現(xiàn)實(shí)世界中的客觀對象抽象為某一種信息結(jié)構(gòu),這種信息結(jié)構(gòu)并不依賴于具體的計算機(jī)系統(tǒng)软舌,不是某一個數(shù)據(jù)庫管理系統(tǒng)(DBMS)支持的數(shù)據(jù)模型才漆,而是概念級的模型,稱為概念模型佛点。
概念數(shù)據(jù)模型就是將客觀的對象抽象為某一種信息結(jié)構(gòu)醇滥,千萬不要把所謂的外鍵,放到從表里面超营。一個實(shí)體它本身該有什么屬性鸳玩,你就寫什么屬性。才開始用powerdesigner的人很容易出現(xiàn)這種錯誤糟描。比如我設(shè)計的表中怀喉,學(xué)生和記錄,如果我將學(xué)號放入體測記錄表中的話船响,然后設(shè)置一對多屬性,一會直接生成的pdm就會出現(xiàn)重復(fù)屬性躲履。
在mysql中沒有大寫這么一說见间,所以我們最好是使用下劃線來分開單詞,也是為了一會能夠通過mybatis直接將下劃線轉(zhuǎn)為駝峰式命名工猜。更多的命名規(guī)則可以看mysql命名規(guī)范 阿里云米诉,里面有更多的設(shè)計規(guī)范。
表名和描述:
名字用中文篷帅,代碼用英文史侣。
比如我的學(xué)生表:
2.設(shè)置參數(shù)
根據(jù)規(guī)范,我們最好將我們的字段設(shè)置為not null非空拴泌,設(shè)置好默認(rèn)值。這里的設(shè)置方法如下:
雙擊實(shí)體進(jìn)入該entity properties窗口:
用光標(biāo)選中你要設(shè)置的字段惊橱,按住
alt+enter
就有更多的設(shè)置:然后我們點(diǎn)擊standard checks
在default這一欄里面蚪腐,我們就可以設(shè)置默認(rèn)值。ok
生成pdm文件
其實(shí)可以通過cdm直接生成pdm文件税朴,但是需要注意的是在生成pdm之前最好把錯誤回季,和警告排除了。最常見的是重復(fù)名字了正林。
當(dāng)我寫文章的時候泡一,錯誤已經(jīng)被我干掉了,emmm觅廓,所以~~~~鼻忠。直接生成pdm,快捷鍵ctrl+shift+p
,沒有就直接生成杈绸,有的話選擇更新帖蔓,確定就好。
設(shè)計物理數(shù)據(jù)模型注意點(diǎn)
這里十分關(guān)鍵S蕖讨阻!因?yàn)橐粫何覀兪峭ㄟ^odbc直接將物理數(shù)據(jù)模型導(dǎo)入數(shù)據(jù)庫,如果這里有什么奇怪的問題篡殷,直接的結(jié)果就是導(dǎo)入的數(shù)據(jù)庫不完整钝吮。
重新檢查物理數(shù)據(jù)模型,調(diào)整一些參數(shù)
根據(jù)自己選擇的數(shù)據(jù)對某些參數(shù)類型需要修改板辽。比如我只是需要年份year這個mysql 類型奇瘦,但是從cdm轉(zhuǎn)換過來的是沒有的(當(dāng)然有可能我沒有找到位置),設(shè)置獨(dú)有的類型要通過下拉條找劲弦!點(diǎn)...按鈕是沒有的耳标。
常見的錯誤:
刪除失敗
問題描述:這個問題常見于有很多外鍵關(guān)系的數(shù)據(jù)庫,因?yàn)樯傻哪_本文件是直接判斷表是否存在邑跪,存在就直接刪除次坡。但是因?yàn)橛泻芏嗤怄I關(guān)系,所以刪除不成功画畅。
解決方案:多執(zhí)行幾次刪除表命令砸琅,保證一個干凈的數(shù)據(jù)庫。導(dǎo)入的數(shù)據(jù)庫轴踱,外鍵不完整
問題描述:這是個常見問題症脂,表現(xiàn)為表示是部分獨(dú)立的,一部分一部分執(zhí)行有的時候?qū)е碌慕Y(jié)果也是不一樣的。
解決方案:檢查外鍵關(guān)系诱篷。
解決步驟:
雙擊外鍵關(guān)系的線壶唤,修改code這個屬性。主要是出現(xiàn)在有cdm生成pdm的時候棕所,一對多闸盔,和多對多。上述場景一定要根據(jù)數(shù)據(jù)庫約束重新檢查一次外鍵關(guān)系橙凳。code千萬不要用中文蕾殴,不然生成的外鍵很丑~~~默認(rèn)值導(dǎo)致的表生成失敗
錯誤場景:創(chuàng)建表失敗,錯誤提示非法值岛啸。
錯誤原因:設(shè)置默認(rèn)值的時候钓觉,特別是字符串的時候,不符合類型要求坚踩,就會出現(xiàn)錯誤荡灾。
導(dǎo)入數(shù)據(jù)庫
導(dǎo)入之前,一定要檢測pdm語法瞬铸,排錯批幌,排警告(后面我寫一些常見的錯誤和警告還有解決方法)。
通過Navicat創(chuàng)建一個數(shù)據(jù)庫方便嗓节,
配置ODBC
我這里用的mysql的所以我下載的是64位的ODBC荧缘。注意!拦宣!powerdesigner ODBC mysql 的位數(shù)一定要一致=卮帧!鸵隧!不然會失敗的绸罗。逆向工程也是一樣的。
生成數(shù)據(jù)庫
可以根據(jù)可以根據(jù)你需要豆瘫,導(dǎo)出sql珊蟀,或者導(dǎo)入的表。
最直接的方式就是看代碼外驱,里面的設(shè)置是否存在問題育灸。