Java实现学生、班级、年级管理系统

shihongpin / 2024-08-28 / 原文

分层思想

  • 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,导入成功。