目录
然后,我们需要写上该实体类的接口(表现层):TeacherMapper
其次,到业务逻辑层(sql查询逻辑)TeacherService:
最后,我的控制层代码(也是核心),基本的增删改查就已经可以实现完了,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,"系统错误!");
}
}
以上就是整个后端实现的步骤了。
所以,本期内容就到这啦。
感谢观看!