分层思想
- DAO层:主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此
- Service层:主要负责业务模块的应用逻辑设计,设计接口、实现类等,Service层的业务层具体要调用已经定义的DAO层接口
- Controller层:负责具体的业务模块流程的控制,要调用Service层的接口来控制业务流程
具体步骤
1、 设置MySQL数据库
2、 创建Java项目并配置MySQL JDBC
3、 分层设计Java类
4、 实现Console输入与数据库操作
设置MySQL数据库
一、数据表设计
1、E-R图:实体-联系图,提供了表示实体类型、属性和联系的方法,用来描述现实世界和概念模型。
(1)实体类型:具有相同属性的实体必然具有共同的特征和性质。用实体名及描述它的各属性名,可以刻画出全部同质实体的共同特征和性质,称为实体类型。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)就是一个实体型。在E-R图中用矩形表示,矩形框内写明实体名
(2)属性:实体所具有的某一特性,一个实体可由若干个属性来刻画。属性不能脱离实体,属性是相对实体而言的。在E-R图中用椭圆形表示,并用无向边将其与相应的实体连接起来
(3)联系:也称关系,信息世界中反映实体内部或实体之间的关联。实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)
- 一对多的关系怎么标1和n:先假想是其中的的一个实体,把描述的关系放联系名对面的边,我是一个班级,那么我有n个学生,所以n放对边,我是一个学生是吧,我只有一个班级,所以1放我对边。然后就完成了。
2、数据表设计
(1)学生表t_student
字段名 | 字段类型 | 备注 |
---|---|---|
id | bigint | 学生id,学生的唯一标识符 |
class_id | bigint | 班级id,外键,关联到班级表的id |
grade_id | bigint | 年级id,外键,关联到年级表的id |
name | varchar | 姓名 |
gender | tinyint | 性别,1代表男性,2代表女性 |
age | int | 年龄 |
update_time | datetime | 修改时间 |
create_time | datetime | 创建时间 |
delete_flag | tinyint | 删除标记,1代表正常,2代表已删除 |
(2)班级表t_class
字段名 | 字段类型 | 备注 |
---|---|---|
id | bigint | 班级id,班级的唯一标识符 |
grade_id | bigint | 年级id,外键,关联到年级表的id |
name | varchar | 班级名称 |
update_time | datetime | 修改时间 |
create_time | datetime | 创建时间 |
delete_flag | tinyint | 删除标记,1代表正常,2代表已删除 |
(3)年级表t_grade
字段名 | 字段类型 | 备注 |
---|---|---|
id | bigint | 年级id,年级的唯一标识符 |
name | varchar | 年级名称 |
update_time | datetime | 修改时间 |
create_time | datetime | 创建时间 |
delete_flag | tinyint | 删除标记,1代表正常,2代表已删除 |
3、MySQL建表语句
(1)年级表
CREATE TABLE `studentmanagement`.`t_grade` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '年级id',
`name` VARCHAR(255) NOT NULL,
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`delete_flag` TINYINT NOT NULL DEFAULT 1 COMMENT '删除标记',
PRIMARY KEY (`id`))
COMMENT = '年级表';
- AUTO_INCREMENT属性用于自动增长主键。
- DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP用于自动设置update_time和create_time字段的值。
- FOREIGN KEY用于定义外键约束,确保数据的完整性。
- ON DELETE CASCADE确保当被引用的记录被删除时,相关联的记录也会被删除。
(2)班级表
CREATE TABLE `studentmanagement`.`t_class` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '班级id',
`grade_id` BIGINT NOT NULL,
`name` VARCHAR(255) NOT NULL COMMENT '班级名称',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`delete_flag` TINYINT NOT NULL DEFAULT 1 COMMENT '删除标记',
PRIMARY KEY (`id`),
INDEX `grade_id_idx` (`grade_id` ASC) VISIBLE,
CONSTRAINT `grade_id`
FOREIGN KEY (`grade_id`)
REFERENCES `studentmanagement`.`t_grade` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
COMMENT = '班级表';
(3)学生表
CREATE TABLE `studentmanagement`.`t_student` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '学生id',
`class_id` BIGINT NOT NULL COMMENT '班级id',
`grade_id` BIGINT NOT NULL COMMENT '年级id',
`name` VARCHAR(255) NOT NULL COMMENT '学生姓名',
`gender` TINYINT NOT NULL COMMENT '性别',
`age` INT NOT NULL COMMENT '年龄',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`delete_flag` TINYINT NOT NULL DEFAULT 1 COMMENT '删除标记',
PRIMARY KEY (`id`),
INDEX `grade_id_idx_2` (`grade_id` ASC) VISIBLE,
INDEX `class_id_idx` (`class_id` ASC) VISIBLE,
CONSTRAINT `class_id`
FOREIGN KEY (`class_id`)
REFERENCES `studentmanagement`.`t_class` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION,
CONSTRAINT `grade_id_2`
FOREIGN KEY (`grade_id`)
REFERENCES `studentmanagement`.`t_grade` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
COMMENT = '学生表';
- 遇到的问题:Error 1826: Duplicate foreign key constraint 错误,在一个数据库中建了若干张表,其中的外键索引重复了
- 解决方法:设置新的索引名和外键名
DAO层
MySQLConnection类
- 遇到的问题:找不到JDBC驱动类
- 解决方法:新建的项目需要将驱动mysql-connector-java.jar包导入IDEA。在项目下新建文件夹lib,将jar粘贴到该目录下,右击该目录,点击Add as Library,导入成功。