JavaEE期末课程设计 #校园人事管理系统-接口搭建篇

目录

首先,我们做了一个教师实体类,存储教师基本的档案信息:

然后,我们需要写上该实体类的接口(表现层):TeacherMapper

其次,到业务逻辑层(sql查询逻辑)TeacherService:

而我们需要实现该接口,所以需要一个Impl:

最后,我的控制层代码(也是核心),基本的增删改查就已经可以实现完了,TeacherController:


在上一篇展示了业务流程,然后现在开始实现了,因为有16个重复的工作,也就只有我一个个搞出来了,要是有机会就偷偷懒吧,研究研究代码生成器(在实体类篇)。

首先,我们做了一个教师实体类,存储教师基本的档案信息:

package com.project.pmmsystem.domain;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * @author yic
 * @description: 教师档案模块
 * @date 2023/5/5 15:37
 */
@Data
public class Teacher {

    /***
     * 编号
     * @author yic
     * @date 2023/5/5 15:39
     */
    private int id;

    /** 教师工号 */
    @Length(min = 6,max = 9,message = "教师工号长度范围[6~9位自定义字符]")
    private String teacherId;

    /** 教职工登录密码 */
    private String loginPassword;

    /** 教师姓名 */
    private String teacherName;

    /** 性别 */
    private String gender;

    /** 年龄 */
    private int age;

    /** 出生日期 */
    @JSONField(format = "yyyy-MM-dd ")   //后台转换到页面显示
    @DateTimeFormat(pattern="yyyy-MM-dd")  //前端页面转换到Date字段
    private Date birthDate;

    /** 证件号 */
    private String idNumber;

    /** 户籍地 */
    private String registeredResidence;

    /** 居住地 */
    private String currentResidence;

    /** 政治面貌 */
    private String politicalStatus;

    /** 学历 */
    private String education;

    /** 毕业院校 */
    private String graduateSchool;

    /** 手机号 */
    private String phoneNumber;

    /** 所在院系 */
    private String department;

    /** 任教课程 */
    private String teachingCourse;

    /** 教师类型 */
    private String teacherType;

    /** 证件照 */
    private String idPhoto;

    /** 简介文件 */
    private String briefIntro;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8")
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /** 修改时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8")
    @TableField(value = "update_time",fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;
}

然后,我们需要写上该实体类的接口(表现层):TeacherMapper

package com.project.pmmsystem.repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.project.pmmsystem.domain.Teacher;
import org.apache.ibatis.annotations.Mapper;

/***
 * 教师实体类接口
 * @return
 * @author yic
 * @date 2023/5/5 15:46
 */
@Mapper
public interface TeacherMapper extends BaseMapper<Teacher> {

}

其次,到业务逻辑层(sql查询逻辑)TeacherService:

package com.project.pmmsystem.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.project.pmmsystem.domain.Teacher;

public interface TeacherService extends IService<Teacher> {

    /***
     * 账号列表进行分页查询
     * @return
     * @author yic
     * @date 2023/4/29 11:22
     */
    Page<Teacher> selectPage(Page<Teacher> page, QueryWrapper<Teacher> wrapper);

}

而我们需要实现该接口,所以需要一个Impl:

package com.project.pmmsystem.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.project.pmmsystem.domain.Teacher;
import com.project.pmmsystem.repository.TeacherMapper;
import com.project.pmmsystem.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author yic
 * @description: TODO
 * @date 2023/5/5 15:49
 */
@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {

    @Autowired
    private TeacherMapper teacherMapper;

    /***
     * 教师档案列表分页查询
     * @return
     * @author yic
     * @date 2023/4/29 11:29
     */
    @Override
    public Page<Teacher> selectPage(Page<Teacher> page, QueryWrapper<Teacher> wrapper) {
        return teacherMapper.selectPage(page,wrapper);
    }

}

在这里可以看见我的业务逻辑层怎么这么少代码呀?因为第一次搞,把它写在控制层了,基本没啥问题,但是建议还是在业务层写逻辑哈!

最后,我的控制层代码(也是核心),基本的增删改查就已经可以实现完了,TeacherController:

package com.project.pmmsystem.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.project.pmmsystem.common.Result;
import com.project.pmmsystem.domain.Teacher;
import com.project.pmmsystem.repository.TeacherMapper;
import com.project.pmmsystem.service.TeacherService;
import com.project.pmmsystem.utils.Code;
import com.project.pmmsystem.utils.R;
import com.project.pmmsystem.utils.TimeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.UUID;

/**
 * @author yic
 * @description: TODO
 * @date 2023/5/6 8:15
 */
@RestController
@Slf4j
@CrossOrigin
public class TeacherController {

    @Autowired
    private TeacherService teacherService;

    @Autowired
    private TeacherMapper teacherMapper;

    /**
     * 时间格式化
     */
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");
    /**
     * 图片保存路径
     */
    @Value("${file-save-path}")
    private String fileSavePath;

    /***
     * 查询教师档案所有信息
     * @return
     * @author yic
     * @date 2023/5/14 11:45
     */
    @PostMapping("/TeacherList")
    public List<Teacher> TeacherList(){
        return teacherMapper.selectList(null);
    }

    /**
     * 图片上传
     *
     * @param file
     * @param request
     * @return
     */
    @PostMapping("/upload")
    public R uploadPicture(@RequestParam("file") MultipartFile file, HttpServletRequest request) {

        /**
         * 格式化时间
         */
        String directory = simpleDateFormat.format(TimeUtil.getTime());

        /**
         * 文件保存目录 D:/tmp/images/2023/04/20/
         * 如果目录不存在,则创建
         */
        File dir = new File(fileSavePath + directory);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        System.out.println("图片上传,保存的位置:" + fileSavePath + directory);

        /**
         * 给文件重新设置一个名字
         * 后缀
         */
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;

        //4.创建这个新文件
        File newFile = new File(fileSavePath + directory + newFileName);
        //5.复制操作
        try {
            // 移动文件
            file.transferTo(newFile);
            //协议 :// ip地址 :端口号 / 文件目录(/tmp/images/2020/03/15/xxx.jpg)
            String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/images/" + directory + newFileName;
            System.out.println("图片上传,访问URL:" + url);
            return new R(Code.WORK_OK, "上传成功", url);
        } catch (IOException e) {
            return new R(Code.WORK_ERR, "IO异常");
        }
    }

    @PostMapping("/TeacherLogin")
    public Result<?> loginIn(@Validated @RequestBody Teacher teacher){
        QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
        wrapper.eq("teacher_id", teacher.getTeacherId()).eq("login_password", teacher.getLoginPassword());
        Teacher user = teacherMapper.selectOne(wrapper);
        if (user == null) {
            return Result.error(401,"未能找到您的账号,是否账号或密码错误,或者没有呢?");
        }
        return Result.success(200,"登录成功",user.getTeacherId()+","+user.getTeacherName());
    }

    /***
     * 教师档案的分页查询、模糊查询
     * @return
     * @author yic
     * @date 2023/5/6 8:31
     */
    @PostMapping("/TeacherPageList/{current}/{pageSize}")
    public Result<?> selectPage(@PathVariable("current") long current, @PathVariable("pageSize") long pageSize, @RequestBody Teacher teacher){
        //mybatis-plus分页
        Page<Teacher> page = new Page<>(current, pageSize);
        QueryWrapper<Teacher> wrapper = new QueryWrapper<>();

        // 根据教师的工号和名字进行模糊查询
        String teacherName = teacher.getTeacherName();
        String teacherId = teacher.getTeacherId();
        if (!StringUtils.isEmpty(teacherName)){
            wrapper.like("teacher_name",teacherName);
        }else if (!StringUtils.isEmpty(teacherId)){
            wrapper.like("teacher_id",teacherId);
        }
        // 根据添加时间进行降序排序
        wrapper.orderByDesc("create_time");
//        wrapper.orderByDesc("update_time");
        Page<Teacher> result = teacherService.selectPage(page, wrapper);
        if (result.getRecords().size() == 0){
            return Result.error(555,"查询为空!");
        }
        return Result.success(200,"查询成功",result);
    }

    /***
     * 新增教师档案
     * @return
     * @author yic
     * @date 2023/5/6 8:43
     */
    @PostMapping("/addTeacherArchives")
    public Result<?> addTeacherArchives(@Validated @RequestBody Teacher teacher){
        /** 通过账号和密码去查询数据表中是否存在有该数据
         *  使用Lambda表达式去查询 将查询出来的结果是一个对象 */
        QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
        wrapper.eq("teacher_id",teacher.getTeacherId());
        List<Teacher> list = this.teacherService.list(wrapper);
        // 根据教师工号唯一性去添加新的招聘信息 如果存在则提醒已存在,不存在则添加
        if (list.size()>0){
            return Result.error(555,"该工号已存在,重新设计或联系数据管理员!",teacher);
        }else {
            Teacher teacher1 = new Teacher();
            BeanUtils.copyProperties(teacher,teacher1);

            return teacherService.saveOrUpdate(teacher1)
                    ? Result.success(200,"个人档案信息添加成功!",teacher1)
                    : Result.error(555,"添加出错!",teacher1);
        }
    }

    /***
     * 修改档案
     * @param teacher
     * @return com.project.pmmsystem.common.Result<?>
     * @author yic
     * @date 2023/5/6 10:17
     */
    @PostMapping("/upDataTeacherArchives")
    public Result<?> upDataTeacherArchives(@Validated @RequestBody Teacher teacher){

        return teacherService.updateById(teacher)
                ? Result.success(200,"教师档案信息已更新!",teacher)
                : Result.error();
    }

    /***
     * 删除档案数据
     * @param teacher
     * @return com.project.pmmsystem.common.Result<?>
     * @author yic
     * @date 2023/5/6 19:13
     */
    @PostMapping("/deleteTeacherArchives")
    public Result<?> deleteTeacherArchives(@RequestBody Teacher teacher){
        return teacherService.removeById(teacher)
                ? Result.success(200,"该档案已成功删除!",teacher)
                : Result.error(555,"系统错误!");
    }

}

以上就是整个后端实现的步骤了。

所以,本期内容就到这啦。

感谢观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值