Skip to content

第一次考试

1257字约4分钟

2025-07-15

一、考试内容

中间件

项目信息
服务器
mysql自己的
redis
nacos

实现要求

说明

项目信息
时间2.5小时
开发工具idea/ maven
技术栈springboot (mybatis,mybatisplus, springdataJPA三选一)

说明: 开卷

验收标准

1. 完成代码开发,
2. 完成数据的设计
3. 后台无报错,
4. 所有类要注释要标记自己的名字, 并有相对完整的注释 
4. 提交一个压缩包到指定位置
   压缩包名: 学号-原班级_学号_《java提高班》周考
   压缩内容: 
   A: 导出的sql
   B:项目打包成的jar包,
   C: 项目主要代码和运行结果的截图 
      比如要包括但不限于以下相关截图:
            1.项目运行无异常(控制台截图)
			2.项目结构的截图
			3.Mysql表的截图
			4.Application.properties截图
			5.Maven依赖截图
			6.Api工具测试的截图(CRUD)

技术要求

项目信息
API设计规范采用rest风格
数据库合理即可
代码质量合理即可
考勤系统中员工和部门的关系表

1. 设计员工和部门表,每张表字段不能少于5个
2. 实现员工表和部门表的CRUD。(要有多表连接)

加分选项: 
1. 自己可以发挥想象,添加需求! 在文档中注明即可!

二、表结构设计

-- 创建部门表
CREATE TABLE `departments`
(
    `department_id`   int          NOT NULL AUTO_INCREMENT,
    `department_name` varchar(100) NOT NULL,
    `location`        varchar(100) DEFAULT NULL,
    `manager_name`    varchar(50)  DEFAULT NULL,
    `create_time`     datetime     DEFAULT CURRENT_TIMESTAMP,
    `update_time`     datetime     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`department_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_0900_ai_ci;

-- 创建员工表
CREATE TABLE `employees`
(
    `employee_id`   int         NOT NULL AUTO_INCREMENT,
    `first_name`    varchar(50) NOT NULL,
    `last_name`     varchar(50) NOT NULL,
    `email`         varchar(100) DEFAULT NULL,
    `phone`         varchar(20)  DEFAULT NULL,
    `hire_date`     date         DEFAULT NULL,
    `salary`        double       DEFAULT NULL,
    `department_id` int          DEFAULT NULL,
    `create_time`   datetime     DEFAULT CURRENT_TIMESTAMP,
    `update_time`   datetime     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`employee_id`),
    KEY `fk_department` (`department_id`),
    CONSTRAINT `fk_department` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_0900_ai_ci;

插入数据


/*
    数据插入
*/
-- 插入部门数据
INSERT INTO `departments` (`department_name`, `location`, `manager_name`)
VALUES ('研发部', '北京', '张伟'),
       ('市场部', '上海', '李娜'),
       ('人事部', '广州', '王芳'),
       ('财务部', '深圳', '赵强'),
       ('销售部', '杭州', '刘洋');

-- 插入员工数据
INSERT INTO `employees` (`first_name`, `last_name`, `email`, `phone`, `hire_date`, `salary`, `department_id`)
VALUES ('', '', 'zhang.wei@example.com', '13800138001', '2020-01-15', 15000, 1),
       ('', '', 'li.na@example.com', '13800138002', '2019-05-20', 12000, 2),
       ('', '', 'wang.fang@example.com', '13800138003', '2018-11-10', 10000, 3),
       ('', '', 'zhao.qiang@example.com', '13800138004', '2021-03-05', 18000, 4),
       ('', '', 'liu.yang@example.com', '13800138005', '2020-07-22', 16000, 5),
       ('', '', 'chen.ming@example.com', '13800138006', '2021-02-18', 11000, 1),
       ('', '', 'lin.xiao@example.com', '13800138007', '2019-08-30', 9500, 2),
       ('', '', 'huang.jing@example.com', '13800138008', '2020-04-12', 8500, 3),
       ('', '', 'wu.gang@example.com', '13800138009', '2021-01-25', 12500, 4),
       ('', '', 'zhou.hong@example.com', '13800138010', '2019-11-05', 13500, 5),
       ('', '', 'xu.liang@example.com', '13800138011', '2020-09-15', 10500, 1),
       ('', '', 'sun.li@example.com', '13800138012', '2021-06-20', 11500, 2),
       ('', '', 'ma.qiang@example.com', '13800138013', '2019-03-10', 9000, 3),
       ('', '', 'zhu.hua@example.com', '13800138014', '2020-12-05', 14000, 4),
       ('', '', 'hu.wei@example.com', '13800138015', '2021-05-22', 13000, 5),
       ('', '', 'gao.feng@example.com', '13800138016', '2019-10-18', 9500, 1),
       ('', '', 'zheng.min@example.com', '13800138017', '2020-07-30', 11000, 2),
       ('', '', 'liang.chao@example.com', '13800138018', '2021-04-12', 8500, 3),
       ('', '', 'xie.jun@example.com', '13800138019', '2019-01-25', 12500, 4),
       ('', '', 'song.na@example.com', '13800138020', '2020-08-05', 13500, 5),
       ('', '', 'tang.jie@example.com', '13800138021', '2021-03-15', 10500, 1),
       ('', '', 'xu.ting@example.com', '13800138022', '2019-12-20', 11500, 2),
       ('', '', 'han.qiang@example.com', '13800138023', '2020-05-10', 9000, 3),
       ('', '', 'feng.hua@example.com', '13800138024', '2021-02-05', 14000, 4),
       ('', '', 'dong.wei@example.com', '13800138025', '2019-09-22', 13000, 5),
       ('', '', 'cao.feng@example.com', '13800138026', '2020-06-18', 9500, 1),
       ('', '', 'peng.min@example.com', '13800138027', '2021-01-30', 11000, 2),
       ('', '', 'pan.chao@example.com', '13800138028', '2019-08-12', 8500, 3),
       ('', '', 'yuan.jun@example.com', '13800138029', '2020-03-25', 12500, 4),
       ('', '', 'yu.na@example.com', '13800138030', '2021-10-05', 13500, 5);

三、实体类编写

package work.exam.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 部门实体类
 * 作者:李潞
 * 对应数据库中的departments表
 */
@Data
@TableName("departments")
public class Department {
    @TableId(type = IdType.AUTO)
    /**
     * 部门ID,主键
     */
    private Integer departmentId;

    /**
     * 部门名称
     */
    private String departmentName;

    /**
     * 部门位置
     */
    private String location;

    private String managerName;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @TableField(exist = false) // 一对多关联
    private List<Employee> employees;
}
package work.exam.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.util.Date;
/**
 * 员工实体类
 * 作者:李潞
 * 对应数据库中的employees表
 */

@Data
@TableName("employees")
public class Employee {
    @TableId(type = IdType.AUTO)
    /**
     * 员工ID,主键
     */
    private Integer employeeId;

    /**
     * 员工名字
     */
    private String firstName;

    /**
     * 员工姓氏
     */
    private String lastName;

    /**
     * 邮箱地址
     */
    private String email;

    private String phone;

    private Date hireDate;

    private Double salary;

    @TableField("department_id")
    private Integer departmentId;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @TableField(exist = false) // 一对一关联(部门信息)
    private Department department;
}

application.yaml

# Server Configuration
server:
  port: 8080

# Logging Configuration
logging:
  level:
    work:
      mapper: debug
      service: info
      controller: info

# Active Profile
spring:
  profiles:
    active: dev
  main:
    allow-circular-references: true

  #DataSource Configuration (Druid)
  datasource:
    url: jdbc:mysql://${fromsko.datasource.host}:${fromsko.datasource.port}/${fromsko.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: ${fromsko.datasource.username}
    password: ${fromsko.datasource.password}
    driver-class-name: ${fromsko.datasource.driver-class-name}

  # close thymeleaf cache
  thymeleaf:
    cache: false

mybatis-plus:
  configuration:
    # MyBatis 配置
    map-underscore-to-camel-case: true
  global-config:
    # 全局配置
    db-config:
      # 数据库配置
      id-type: auto
  mapper-locations: classpath:/mapper/*.xml
  type-aliases-package: work.exam.entity

# application-dev.yaml
fromsko:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    host: localhost
    port: 3306
    database: attendance_system
    username: root
    password: root

四、核心

Mapper

采用 Mybaits-plus 并增加如下接口

EmployeeServiceMapper

DepartmentMapper

pom.xml

使用的 父子工程

pom-child-file

pom-parent-file

五、运行截图

目录

mulu

接口

pages

apifox-controllers

apifox-web