无偿!全代码!增删改查+redis+token+mybatisplus 完整代码+讲解适合大一大二以及新手小白 Controller层讲解

这是一个简单的基础的且有不足的代码1.设置了一个管理员账号用于登录页面(用到简单的redis和token)2.增删改查(批量or单个删除)患者信息3.可更改患者身体状况4.excl表导出患者总体信息4.计算不同地区的患者情况并用前端以图标形式展示5.可以与服务器连接(若交作业可忽略)

注意:

1.原理不讲,会讲细节,是为了更好理解我的代码含义

2.我以Controller层->Service层(接口)->ServiceImpl层->Mapper层->Mapper.xml(不一定需要)的结构为主线来讲解

若有讲解的地方不对,请指正,感谢

简单梳理:代码书写顺序:

Controller层->Service层(接口)->ServiceImpl层->Mapper层->Mapper.xml(不一定需要)

接收数据->处理数据->写入数据->返回数据

(1).最主要,最多的代码是写在ServiceImpl

(2).若查询的要求简单,可以直接在Mapper层写,若查询的要求复杂,要写在Mapper.xml文件

(3).层与层之间,要用@Autoward注入,以及写上如下代码才可以连接起来。

patientService.save(patientDTO);

 

Controller层要注意的细节:


@RestController一定要写

@RequestMapping("/patient"),因为这里写了"/patient",所以后面每个小分支只要写"/patient"后面的内容即可,比如/login,就可以,这样最后呈现的效果就是:/patient/login

/*** 病患管理*/
@RestController
@RequestMapping("/patient")
@Slf4j
public class PatientController {private PatientService patientService;public PatientController(PatientService patientService){this.patientService=patientService;}

以新增病患为例子,细讲分支

/*** 新增病患* @param patientDTO* @return*/@PostMapping@ApiOperation("新增病患")public Result save(@RequestBody PatientDTO patientDTO){log.info("新增病患:{}",patientDTO);patientService.save(patientDTO);return Result.success();}


1.@PostMapping

/patient 用于和前端连接,要符合接口文档写。

Post      也要符合接口文档写

2.ApiOperation(“新增病患”)

是为了在后端用接口文档调试的时候,我们看的更清晰 

接口文档相关知识: 

接口文档?AYPI?全流程?小白新手教程-CSDN博客

3.Result.success

Result这里的数据是与前端交互的,这里其实是自定义的,有人自定义Result.ok(),而我用的是Result.success(),我写在了这里

package com.simplesin.result;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* @param <T>*/
@Data
public class Result<T> implements Serializable {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result<T> success() {Result<T> result = new Result<T>();result.code = 1;return result;}public static <T> Result<T> success(T object) {Result<T> result = new Result<T>();result.data = object;result.code = 1;return result;}public static <T> Result<T> error(String msg) {Result result = new Result();result.msg = msg;result.code = 0;return result;}}

 4.@RequestBody,另外单独讲

5.

DTO 来的数据,所以Controller层一般是DTO的。

VO 返回的数据

还有一种叫实体参数

一般写在这里

这里贴出所有要用到的DTO,VO,实体参数

DTO:

package com.simplesin.dto;import lombok.Data;import java.io.Serializable;@Data
public class EmployeeDTO implements Serializable {private Long id;private String username;private String name;private String phone;private String sex;private String idNumber;}
package com.simplesin.dto;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.io.Serializable;@Data
@ApiModel(description = "员工登录时传递的数据模型")
public class EmployeeLoginDTO implements Serializable {@ApiModelProperty("用户名")private String username;@ApiModelProperty("密码")private String password;@ApiModelProperty("验证码")private String code;@ApiModelProperty("手机号码")private String phone;}
package com.simplesin.dto;import lombok.Data;import java.io.Serializable;@Data
public class PatientDTO implements Serializable {private Long id;private String name;private String phone;private String sex;private String idNumber;private String address;
}
package com.simplesin.dto;import lombok.Data;import java.io.Serializable;@Data
public class PatientPageQueryDTO implements Serializable {//病患姓名private String name;//页码private int page;//每页显示记录数private int pageSize;}

实体参数

package com.simplesin.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.time.LocalDateTime;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee implements Serializable {private static final long serialVersionUID = 1L;private Long id;private String username;private String name;private String password;private String phone;private String sex;private String idNumber;private Integer status;//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;private Long createUser;private Long updateUser;}
package com.simplesin.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.time.LocalDateTime;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Patient implements Serializable {private static final long serialVersionUID = 1L;private Long id;private String name;private String phone;private String sex;private String idNumber;private Integer beInfected;private Integer recover;private Integer die;private String address;//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;private Long createUser;private Long updateUser;}

VO:

package com.simplesin.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "员工登录返回的数据格式")
public class EmployeeLoginVO implements Serializable {@ApiModelProperty("主键值")private Long id;@ApiModelProperty("用户名")private String userName;@ApiModelProperty("姓名")private String name;@ApiModelProperty("jwt令牌")private String token;}
package com.simplesin.vo;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** 疫情数据概览*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EpidemicVO {private Integer southRecover;//南方康复情况private Integer northRecover;//北方康复情况private Integer westRecover;//西方康复情况private Integer eastRecover;//东方康复情况private Integer southDie;//南方康复情况private Integer northDie;//北方康复情况private Integer westDie;//西方康复情况private Integer eastDie;//东方康复情况private Integer southBeInfected;//南方被感染情况private Integer northBeInfected;//北方被感染情况private Integer westBeInfected;//西方被感染情况private Integer eastBeInfected;//东方被感染情况}
package com.simplesin.vo;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReportVO implements Serializable {//地址,以逗号分隔,例如:南方,北方,西方,东方private String address;//康复总人数,以逗号分隔,例如:260,210,215private Integer recoverCount ;//死亡总人数,以逗号分隔,例如:260,210,215private Integer dieCount ;//被感染总人数,以逗号分隔,例如:260,210,215private Integer beInfectedCount ;
}


6.@Slf4j

作用是用来写log.info,方便我们在控制台查看有没有bug,类似于sout,输出语句,但为了更加规范项目书写格式,运用log.info

例如:

idea控制台输出结果:

7.正常来说,这里可以注入,也就是@Autoward,但是我当时应该是遇到了一些bug,所以改用了这种方式注入,也是可以的

private PatientService patientService;public PatientController(PatientService patientService){this.patientService=patientService;}

病患:

package com.simplesin.controller;import com.simplesin.dto.PatientDTO;
import com.simplesin.dto.PatientPageQueryDTO;
import com.simplesin.entity.Patient;
import com.simplesin.result.PageResult;import com.simplesin.result.Result;
import com.simplesin.service.PatientService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** 病患管理*/
@RestController
@RequestMapping("/patient")
@Slf4j
public class PatientController {private PatientService patientService;public PatientController(PatientService patientService){this.patientService=patientService;}/*** 新增病患* @param patientDTO* @return*/@PostMapping@ApiOperation("新增病患")public Result save(@RequestBody PatientDTO patientDTO){log.info("新增病患:{}",patientDTO);patientService.save(patientDTO);return Result.success();}/**** 病患分页查询* @param patientPageQueryDTO* @return*/@GetMapping("/page")@ApiOperation("病患分页查询")public Result<PageResult> page(PatientPageQueryDTO patientPageQueryDTO){log.info("病患分页查询,参数为:{}",patientPageQueryDTO);PageResult pageResult = patientService.pageQuery(patientPageQueryDTO);return Result.success(pageResult);}/**** 被感染情况* @param beInfected* @param id* @return*/@PostMapping("/beInfected/{beInfected}")@ApiOperation("被感染情况")public Result beInfectedOrnotBeInfected(@PathVariable Integer beInfected,Long id){log.info("被感染情况:{},{}",beInfected,id);patientService.beInfected(beInfected,id);return Result.success();}/*** 康复情况* @param recover* @param id* @return*/@PostMapping("/recover/{recover}")@ApiOperation("康复情况")public Result recoverOrnotRecover(@PathVariable Integer recover,Long id){log.info("康复情况:{},{}",recover,id);patientService.recover(recover,id);return Result.success();}/*** 死亡情况* @param die* @param id* @return*/@PostMapping("/die/{die}")@ApiOperation("死亡情况")public Result dieOrnotDie(@PathVariable Integer die,Long id){log.info("死亡情况:{},{}",die,id);patientService.die(die,id);return Result.success();}/*** 根据id查询病患信息* @param id* @return*/@GetMapping("/{id}")@ApiOperation("根据id查询病患信息")public <Result> com.simplesin.result.Result<com.simplesin.result.Result<Patient>> getById1(@PathVariable Long id){com.simplesin.result.Result<Patient> patient = patientService.getById1(id);return com.simplesin.result.Result.success(patient);}/*** 编辑病患信息* @param patientDTO* @return*/@PutMapping@ApiOperation("编辑病患信息")public Result update(@RequestBody PatientDTO patientDTO){log.info("编辑病患信息:{}",patientDTO);patientService.update(patientDTO);return Result.success();}/*** 病患信息批量删除* @param ids* @return*/@DeleteMapping("/delete")@ApiOperation("病患信息批量删除")public  Result delete(@RequestParam List<Long> ids){log.info("菜品批量删除:{}",ids);patientService.deleteBatch(ids);return Result.success();}}

管理员

package com.simplesin.controller;import com.simplesin.result.Result;
import com.simplesin.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;/*** 员工管理*/
@RestController
@RequestMapping("/employee")
@Slf4j
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;/*** 退出** @return*/@PostMapping("/logout")public Result<String> logout() {return Result.success();}/*** 发送手机验证码* @param phone* @param session* @return*/@PostMapping("/code")public  Result sendCode(@RequestParam("phone") String phone , HttpSession session){//发送短信验证码并保存验证码log.info("phonecode"+phone);employeeService.sendCode(phone,session);return Result.success();}@PostMapping("/login")public Result login(String phone,String Code){//实现登录功能log.info("登录中...");log.info("phone"+phone);log.info("Code"+Code);log.info("aaaa");Result login = employeeService.login(phone, Code);log.info("bbbb");log.info("login"+login);return login;}
}

 


针对中途出现的bug,可以参考我以往的bug处理专栏,都是在写这个项目的时候遇到的bug

还是决定都无偿啦!有兴趣的可以往下看噢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/421565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

校园疫情防控信息管理系统的设计与实现-计算机毕业设计源码12057

摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&#xff0c;防疫成了社会关注的重中…

结构体的内存对齐(计算题常考点)

许久不见我考完试回来啦&#xff0c;让我们接着将结构体进行到底&#xff01; 目录 结构体对齐的意义&#xff1a; 结构体对齐的实现&#xff1a; 对齐规则&#xff1a; 训练&#xff1a; 好到这里误区来了&#xff1a; 总结&#xff1a; 往期回顾&#xff1a; 下期预告&…

docker使用http_proxy配置代理

钢铁知识库&#xff0c;一个学习python爬虫、数据分析的知识库。人生苦短&#xff0c;快用python。 在内网服务器中&#xff0c;docker经常需要下载拉取镜像&#xff0c;但由于没有网络要么只能手动导入镜像包&#xff0c;又或者通过http_proxy代理到其它服务器下载。 解决方法…

Elasticsearch+Kibana 学习记录

文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置&#xff08;不配置好像也行、智能判断&#xff09;新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有&#xff08;match_all&#xff09;匹配查…

腾讯产品面试题:为什么水果店不卖蔬菜,蔬菜店却卖水果?

嗨&#xff0c;亲爱的小伙伴们&#xff01;小米又来啦~ 今天我要和大家聊一聊一个超级有趣的话题——腾讯产品面试题&#xff1a;为什么水果店不卖蔬菜&#xff0c;蔬菜店却卖水果&#xff1f;这是不是让你脑洞大开呀&#xff1f;&#xff01;不过别着急&#xff0c;小米会给你…

【Leetcode】2788. 按分隔符拆分字符串

文章目录 题目思路代码 题目 题目链接 给你一个字符串数组 words 和一个字符 separator &#xff0c;请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组&#xff0c;不包括空字符串 。 注意 separator 用于决定拆分发生的位置&#…

预防校园火灾守护校园安全:巡检系统的使命与责任

校园安全的重要性 校园场所因人员密集而具有特殊的安全风险&#xff0c;一旦发生事故往往会引发严重后果。近日方城一小学发生的火灾造成了13人遇难&#xff0c;这样的悲剧再次提醒我们&#xff0c;生命安全绝对不能忽视。因此&#xff0c;预防校园火灾是每一个校园管理者和师生…

PS滤镜插件:Adobe Camera Raw 16 for Mac中文激活版

Adobe Camera Raw是Adobe公司开发的一款用于处理数码相机RAW格式文件的软件插件。它可以在Adobe Photoshop、Adobe Bridge和Adobe Lightroom等软件中使用&#xff0c;用于调整RAW文件的曝光、白平衡、对比度、色彩饱和度、锐化等参数&#xff0c;从而得到更好的图像质量。 软件…

Mysql - 定点型(DECIMAL)的使用详解及练习

目录 &#x1f436;1. 前言&#xff1a; &#x1f436;2. DECIMAL类型简介 &#x1f436;3. Decimal使用实战 &#x1f96a;#结论1&#xff1a;小数位不足会自动补0 &#x1f96a;#结论2&#xff1a;小数位超出会截断 并按四舍五入处理。 &#x1f96a;#结论3&#xff1…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 文章目录 一、串口输出(1) 简介(2) 示例代码(3) 仿真效果 二、串口输入(1) 简介(2) 示例代码(3) 仿真效果 三、ADC采集(1) 简介(2) 示例代码&#xff08;电压&#xff09;(3) 仿真效果 &#xff08;…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-4 轨迹追踪

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-4 轨迹追踪 1. 目标误差控制-误差的调节2. 稳态非零值控制3. 输入增量控制 1. 目标误差控制-误差的调节 2. 稳态非零值控制 3. 输入增量控制

【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译

VS显示100条左右的错误&#xff0c;UE热编译也不能通过。原因可能是[名字.Build.cs]文件的错误&#xff0c;缺少一些内容&#xff0c;比如说如果要写UserWidget类&#xff0c;那么就要在 ]名字.Build.cs] 中加入如下内容&#xff1a; public class beibaoxitong : ModuleRules …