近段时间学习了mybatis和spring。那么我们需要通过实践来认证自己的知识掌握度。当然也是说一种自己对于数据持久层的开发想法。
准备工作
所使用到的工具:
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>
数据库设计
首先我们需要根据系统需求来设计我们的数据。我根据自己的系统需求设计的数据库。我使用powerdesigner做概念数据模型(CDM) 和物理数据模型(PDM) 。
概念数据模型注意的点
1.概念数据模型里面什么该写?什么不该写?
百度百科给的定义:概念模型表征了待解释的系统的学科共享知识。为了把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个数据库管理系统(DBMS)支持的数据模型,而是概念级的模型,称为概念模型。
概念数据模型就是将客观的对象抽象为某一种信息结构,千万不要把所谓的外键,放到从表里面。一个实体它本身该有什么属性,你就写什么属性。才开始用powerdesigner的人很容易出现这种错误。比如我设计的表中,学生和记录,如果我将学号放入体测记录表中的话,然后设置一对多属性,一会直接生成的pdm就会出现重复属性。
在mysql中没有大写这么一说,所以我们最好是使用下划线来分开单词,也是为了一会能够通过mybatis直接将下划线转为驼峰式命名。更多的命名规则可以看mysql命名规范 阿里云,里面有更多的设计规范。
表名和描述:
名字用中文,代码用英文。
比如我的学生表:
2.设置参数
根据规范,我们最好将我们的字段设置为not null非空,设置好默认值。这里的设置方法如下:
双击实体进入该entity properties窗口:
用光标选中你要设置的字段,按住
alt+enter
就有更多的设置:然后我们点击standard checks
在default这一栏里面,我们就可以设置默认值。ok
生成pdm文件
其实可以通过cdm直接生成pdm文件,但是需要注意的是在生成pdm之前最好把错误,和警告排除了。最常见的是重复名字了。
当我写文章的时候,错误已经被我干掉了,emmm,所以~~~~。直接生成pdm,快捷键ctrl+shift+p
,没有就直接生成,有的话选择更新,确定就好。
设计物理数据模型注意点
这里十分关键!!因为一会儿我们是通过odbc直接将物理数据模型导入数据库,如果这里有什么奇怪的问题,直接的结果就是导入的数据库不完整。
重新检查物理数据模型,调整一些参数
根据自己选择的数据对某些参数类型需要修改。比如我只是需要年份year这个mysql 类型,但是从cdm转换过来的是没有的(当然有可能我没有找到位置),设置独有的类型要通过下拉条找!点...按钮是没有的。
常见的错误:
删除失败
问题描述:这个问题常见于有很多外键关系的数据库,因为生成的脚本文件是直接判断表是否存在,存在就直接删除。但是因为有很多外键关系,所以删除不成功。
解决方案:多执行几次删除表命令,保证一个干净的数据库。导入的数据库,外键不完整
问题描述:这是个常见问题,表现为表示是部分独立的,一部分一部分执行有的时候导致的结果也是不一样的。
解决方案:检查外键关系。
解决步骤:
双击外键关系的线,修改code这个属性。主要是出现在有cdm生成pdm的时候,一对多,和多对多。上述场景一定要根据数据库约束重新检查一次外键关系。code千万不要用中文,不然生成的外键很丑~~~默认值导致的表生成失败
错误场景:创建表失败,错误提示非法值。
错误原因:设置默认值的时候,特别是字符串的时候,不符合类型要求,就会出现错误。
导入数据库
导入之前,一定要检测pdm语法,排错,排警告(后面我写一些常见的错误和警告还有解决方法)。
通过Navicat创建一个数据库方便,
配置ODBC
我这里用的mysql的所以我下载的是64位的ODBC。注意!!powerdesigner ODBC mysql 的位数一定要一致!!!不然会失败的。逆向工程也是一样的。
生成数据库
可以根据可以根据你需要,导出sql,或者导入的表。
最直接的方式就是看代码,里面的设置是否存在问题。