SpringBootWeb案例 Part 4

3. 修改员工

需求:修改员工信息

 

在进行修改员工信息的时候,我们首先先要根据员工的ID查询员工的信息用于页面回显展示,然后用户修改员工数据之后,点击保存按钮可以将修改的数据提交到服务端,保存到数据库。 具体操作为:

  1. 根据记录的ID进行查询用于页面回显展示员工信息{查询回显}

  2. 保存修改的员工信息提交到服务端,保存到数据库{更新数据库表当中的数据}

3.1 查询回显

3.1.1 接口文档

  • 基本信息  

 

  • 请求参数

参数格式:路径参数

参数说明:

参数名类型是否必须备注
idnumber必须员工ID

请求参数样例:

响应数据

参数格式:application/json

参数说明:

名称类型是否必须默认值备注
codenumber必须响应码, 1 成功 , 0 失败
msgstring非必须提示信息
dataobject必须返回的数据
|- idnumber非必须id
|- usernamestring非必须用户名
|- namestring非必须姓名
|- passwordstring非必须密码
|- entrydatestring非必须入职日期
|- gendernumber非必须性别 , 1 男 ; 2 女
|- imagestring非必须图像
|- jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师
|- deptIdnumber非必须部门id
|- createTimestring非必须创建时间
|- updateTimestring非必须更新时间

响应数据样例:

3.1.2 实现思路

  • 通过@PathVariable注解接收请求路径中的路径参数!

3.1.3 代码实现

EmpController 

package com.gch.controller;import com.gch.pojo.Emp;
import com.gch.pojo.PageBean;
import com.gch.pojo.Result;
import com.gch.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import java.time.LocalDate;
import java.util.List;/**员工管理控制器*/
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;/*** 条件分页查询* @param page 分页查询的页码* @param pageSize 分页查询的每页展示记录数* @param name 姓名* @param gender 性别* @param begin 入职日期的开始时间* @param end 入职日期的结束时间* 默认值的设置可以通过注解@RequestParam中的defaultValue()属性来指定默认值* 用@DateTimeFormat注解中的pattern属性指定日期时间类型的格式* 注意:方法签名上的形参变量名需要于接口文档中的请求参数名保持一致* @return*/@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
//        设置默认值,但写法比较繁琐
//        if(page == null) {page = 1;}
//        if(pageSize == null) {pageSize = 10;}// 记录日志log.info("条件分页查询,参数:page:{},pageSize:{},name:{},gender:{},begin:{},end:{}",page,pageSize,name,gender,begin,end);// 调用service分页查询PageBean pageBean = empService.page(page,pageSize,name,gender,begin,end);// 响应return Result.success(pageBean);}/*** 批量删除员工信息* @param ids 接收前端传递过来的路径参数id数组* @return*/@DeleteMapping("/{ids}")public Result delete(@PathVariable List<Integer> ids) {// 记录日志log.info("批量删除员工,ids:{}",ids);// 调用service批量删除empService.delete(ids);// 响应return Result.success();}/*** 新增员工* @param emp 员工对象* 在Controller中使用@RequestBody注解接收前端传递的JSON格式的数据并填充到实体类中* @return 返回统一响应结果*/@PostMappingpublic Result save(@RequestBody Emp emp) {// 记录日志log.info("新增员工 , emp:{}",emp);// 调用service添加员工empService.save(emp);// 响应return Result.success();}/*** 根据主键ID进行员工信息查询* @param id 主键ID* @return 响应统一结果* 在Controller中通过@PathVariable注解接收请求路径中的路径参数*/@GetMapping("/{id}")public Result getById(@PathVariable Integer id) {// 1.记录日志log.info("根据id查询员工信息,id:{}",id);// 2.调用service查询Emp emp = empService.selectById(id);// 3.响应return Result.success(emp);}
}

EmpService 

package com.gch.service;import com.gch.pojo.Emp;
import com.gch.pojo.PageBean;import java.time.LocalDate;
import java.util.List;/**员工业务规则*/
public interface EmpService {/*** 条件分页查询* @param page     => 分页查询的页码* @param pageSize => 分页查询的每页展示记录数* @param name => 姓名* @param gender => 性别* @param begin => 入职日期的开始时间* @param end => 入职日期的结束时间* @return*/PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工信息操作* @param ids 前端传递过来的路径参数id集合*/void delete(List<Integer> ids);/*** 添加员工* @param emp 员工对象*/void save(Emp emp);/*** 根据主键ID查询员工* @param id 主键ID* @return 返回员工对象*/Emp selectById(Integer id);
}

EmpServiceImpl 

package com.gch.service.impl;import com.gch.mapper.EmpMapper;
import com.gch.pojo.Emp;
import com.gch.pojo.PageBean;
import com.gch.service.EmpService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;/**员工业务实现类*/
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;/*** 原始分页查询* @param page     => 分页查询的页码* @param pageSize => 分页查询的每页展示记录数* @return*/
//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//        // 1.获取总记录数
//        Long total = empMapper.count();
//
//        // 2.获取分页查询的数据列表
//        List<Emp> rows = empMapper.pageSelect((page - 1) * pageSize,pageSize);
//
//        // 3.封装PageBean对象
//        return new PageBean(total,rows);
//    }/*** 基于PageHelper分页插件实现分页查询* @param page     => 分页查询的页码* @param pageSize => 分页查询的每页展示记录数* @param name => 姓名* @param gender => 性别* @param begin => 入职日期的开始时间* @param end => 入职日期的结束时间* @return*/@Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end){// 1.设置分页参数PageHelper.startPage(page,pageSize);// 2.执行条件分页查询List<Emp> empList = empMapper.list(name,gender,begin,end);// 获取条件分页查询结果Page<Emp> p = (Page<Emp>)empList;// 3.封装PageBean对象并返回return new PageBean(p.getTotal(),p.getResult());}/*** 批量删除员工信息* @param ids 前端传递过来的路径参数id集合*/@Overridepublic void delete(List<Integer> ids) {empMapper.deleteById(ids);}/*** 添加员工* @param emp 员工对象*/@Overridepublic void save(Emp emp) {// 1.补全员工数据 / 属性emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());// 2.调用mapper层新增员工方法empMapper.add(emp);}/*** 根据主键ID进行员工查询* @param id 主键ID* @return 返回员工对象*/@Overridepublic Emp selectById(Integer id) {return empMapper.selectById(id);}
}
package com.gch.mapper;import com.gch.pojo.Emp;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.time.LocalDate;
import java.util.List;/**员工管理*/
@Mapper
public interface EmpMapper {/*** 查询总记录数* @return*/
//    @Select("select count(*) from tlias.emp")
//    public Long count();/*** 分页查询,获取数据列表/获取列表数据* @param startIndex => 起始索引* @param pageSize => 每页展示记录数* @return*/
//    @Select("select * from tlias.emp limit #{startIndex},#{pageSize}")
//    public List<Emp> pageSelect(Integer startIndex,Integer pageSize);/*** 基于PageHelper进行员工信息条件分页查询* 查询条件参数:*   @param name => 姓名*   @param gender => 性别*   @param begin => 入职日期的开始时间*   @param end => 入职日期的结束时间* @return*/public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工信息* @param ids 前端传递过来的路径参数id集合*/void deleteById(List<Integer> ids);/*** 新增/插入员工* @param emp 员工对象*/@Insert("insert into tlias.emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +"values(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")void add(Emp emp);/*** 根据主键ID进行员工信息查询* @param id 主键ID* @return 返回员工对象*/@Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from tlias.emp where id = #{id}")Emp selectById(Integer id);
}

3.1.4 启动项目,Postman测试

 

3.1.5 前后端联调 - 查询回显

 

3.2 修改员工

 

当数据查询回显之后,就可以在表单当中展示出原来的数据,接下来就可以在原来数据的基础上来修改员工的基本信息。 

当用户修改完数据之后,点击保存按钮,就需要将数据提交到服务端,然后服务端需要将修改后的数据更新到数据库中。  

3.2.1 接口文档

  • 基本信息

 

  • 请求参数

参数格式:application/json

参数说明:

名称类型是否必须备注
idnumber必须id
usernamestring必须用户名
namestring必须姓名
gendernumber必须性别, 说明: 1 男, 2 女
imagestring非必须图像
deptIdnumber非必须部门id
entrydatestring非必须入职日期
jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师

请求数据样例:  

 

  • 思考:更新员工数据的时候是根据主键ID来进行更新的,因为更新的时候除了主键ID不能变,其它都有可能发生变化。 
  • 响应数据

参数格式:application/json

参数说明:

响应数据样例:  

 

3.2.2 实现思路

SQL语句:  

-- update语法:update 表名 set 字段名1 = 值1, 字段名2 = 值2,...[where 条件];
-- 更新员工
update emp
set username    = '',password    = '',name        = ',',gender      = ?,image       = '',job         = ?,entrydate   = ?,dept_id     = ?,update_time = ?
where id = ?;

3.2.3 代码实现

  • EmpController
package com.gch.controller;import com.gch.pojo.Emp;
import com.gch.pojo.PageBean;
import com.gch.pojo.Result;
import com.gch.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import java.time.LocalDate;
import java.util.List;/**员工管理控制器*/
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;/*** 修改员工* @param emp 员工对象* @return 响应* 在Controller中通过@RequestBody注解接收前端传递过来的JSON格式的数据并填充到实体类中*/@PutMappingpublic Result updateById(@RequestBody Emp emp) {// 1.记录日志log.info("修改员工,emp:{}",emp);// 2.调用service修改员工empService.update(emp);// 3.响应return Result.success();}
}
  • EmpService
package com.gch.service;import com.gch.pojo.Emp;
import com.gch.pojo.PageBean;import java.time.LocalDate;
import java.util.List;/**员工业务规则*/
public interface EmpService {/*** 修改员工* @param emp*/void update(Emp emp);
}
  •  EmpServiceImpl
package com.gch.service.impl;import com.gch.mapper.EmpMapper;
import com.gch.pojo.Emp;
import com.gch.pojo.PageBean;
import com.gch.service.EmpService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;/**员工业务实现类*/
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;/*** 修改员工* @param emp 员工对象*/@Overridepublic void update(Emp emp) {// 1.补全员工属性emp.setUpdateTime(LocalDateTime.now());// 2.调用mapper层修改员工empMapper.updateById(emp);}
}
  • EmpMapper
package com.gch.mapper;import com.gch.pojo.Emp;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.time.LocalDate;
import java.util.List;/**员工管理*/
@Mapper
public interface EmpMapper {/*** 修改员工* @param emp 员工对象*/void updateById(Emp emp);
}
  • EmpMapper.xml 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gch.mapper.EmpMapper"><!-- 动态更新员工信息 SQL语句中的id需要与mapper接口方法名保持一致--><update id="updateById">update emp<set><if test="username != null and username != ''">username = #{username},</if><if test="password != null and password != ''">password = #{password},</if><if test="name != null and name != ''">name = #{name},</if><if test="gender != null">gender = #{gender},</if><if test="image != null and image != ''">image= #{image},</if><if test="job != null">job = #{job},</if>><if test="entrydate != null">entrydate = #{entrydate},</if><if test="deptId != null">dept_id = #{deptId},</if><if test="updateTime != null">update_time = #{updateTime}</if></set>where id = #{id}</update>
</mapper>

注意:动态更新员工信息 SQL语句中的id需要与mapper接口方法名保持一致! 

3.2.4 Postman测试

 

3.2.5 前后端联调测试

 

掌握基于页面原型和接口文档来开发功能接口的能力。 

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

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

相关文章

【CP2K学习】-在Ubuntu上安装CP2K的全过程(包括gcc,gfortran,MKL等配置)

在Ubuntu中安装CP2K CP2K的安装检查系统是否安装gcc,gfortranMKL数学库的安装CP2K安装包下载CP2K的编译CP2K的测试ssmp版本测试popt版本测试 CP2K是第一性原理计算程序中发展迅速的程序之一&#xff0c;因其开源性、速度性等优点&#xff0c;是广大计算化学研究者的选择。 本文…

数据通信——传输层(UDP)

引言 我们上网观看比赛的时候&#xff0c;一旦网络信号出现问题&#xff0c;那可就太难受了&#xff0c;这意味着卡顿的时间内&#xff0c;你会错过这段时间内的内容。这种特性要归功于UDP&#xff08;User Datagram Protocol&#xff09;用户数据报协议。 无连接性 一般的&am…

上海亚商投顾:创业板指反弹大涨1.26% 核污染概念股午后全线走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日集体反弹&#xff0c;沪指午后冲高回落&#xff0c;创业板指盘中涨超2%&#xff0c;尾盘涨幅也有所收…

53 个 CSS 特效 2

53 个 CSS 特效 2 这里是第 17 到 32 个&#xff0c;跟上一部分比起来多了两个稍微大一点的首页布局&#xff0c;上篇&#xff1a;53 个 CSS 特效 1&#xff0c;依旧&#xff0c;预览地址在 http://www.goldenaarcher.com/html-css-js-proj/&#xff0c;git 地址&#xff1a; …

XSS攻击是怎么回事?记录一下

title: XSS攻击 date: 2023-08-27 19:15:57 tags: [XSS, 网络安全] categories: 网络安全 今天学习了一个网络攻击的手段&#xff0c;XSS攻击技术&#xff0c;大家自建网站的朋友&#xff0c;记得看看是否有此漏洞。 &#x1f388; XSS 攻击 全称跨站脚本攻击 Cross Site Sc…

《机器学习核心技术》分类算法 - 决策树

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 决策树 1、决策树API2、决策时实际应用2.1、获取数据集2.2、划分数据集2.3、决策…

数据库表结构导出为word、html、markdown【转载,已解决,已验证,开源】

注&#xff1a;本文为gitcode代码验证&#xff0c;转载gitcode gitcode&#xff1a;https://gitcode.net/mirrors/pingfangushi/screw?utm_sourcecsdn_github_accelerator 整理数据库文档&#xff1a;https://mp.weixin.qq.com/s/Bo_U5_cl82hfQ6GmRs2vtA <!--数据库文档核…

数据结构--树4.1

目录 一、树的定义 二、结点的分类 三、结点间的关系 四、结点的层次 五、树的存储结构 一、树的定义 树&#xff08;Tree&#xff09;是n&#xff08;n>0&#xff09;个结点的有限集。当n0时称为空树&#xff0c;在任意一个非空树中&#xff1a; ——有且仅有一个特定的…

AI时代,程序员需要焦虑吗?

原文来自 微信公众号"互联网技术人进阶之路". 目录 前言一、程序员会被 AI 取代么&#xff1f;二、服务端开发尚难被 AI 取代三、服务端开发何去何从&#xff1f;四、业界首部体系化、全景式解读服务端开发的著作第一部分&#xff1a;服务端开发的技术和方法第二部分…

nginx-获取客户端IP地址

上有服务器与客户端中间是有nginx代理服务器的&#xff0c;上游服务器如何获取客户端真实ip地址&#xff1f; nginx代理服务器设置X-Forwarded-For的header参数&#xff0c;代理服务器通过remote_addr获取客户端ip地址&#xff0c;将ip地址写入nginx代理服务器的X-Forwarded-Fo…

python编写四画面同时播放swap视频

当代技术让我们能够创建各种有趣和实用的应用程序。在本篇博客中&#xff0c;我们将探索一个基于wxPython和OpenCV的四路视频播放器应用程序。这个应用程序可以同时播放四个视频文件&#xff0c;并将它们显示在一个GUI界面中。 C:\pythoncode\new\smetimeplaymp4.py 准备工作…

sql数据库怎么备份,sql 实时备份

在当今互联网时代&#xff0c;数据已经成为企业的核心资产。然而&#xff0c;数据的安全性和完整性面临硬件问题、软件故障、人工操作错误等各种威胁。为了保证数据的安全&#xff0c;实时备份已经成为公司必须采取的重要措施之一。下面我们就重点介绍SQL实时备份的重要实施方法…

百亿补贴通用H5导航栏方案 | 京东云技术团队

背景 在移动端页面中&#xff0c;由于屏幕空间有限&#xff0c;导航条扮演着非常重要的角色&#xff0c;提供了快速导航到不同页面或功能的方式。用户也通常会在导航条中寻找他们感兴趣的内容&#xff0c;因此导航条的曝光率较高。在这样的背景下&#xff0c;提供一个动态灵活…

你不知道的宝藏合金:高熵合金

高熵合金&#xff08;High-entropy alloys&#xff09;简称HEA&#xff0c;是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多理想的性质&#xff0c;因此在材料科学及工程上相当受到重视。 传统合金是以1~2种金属为主&#xff0c;并通过添加特定的少…

基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

兄弟,王者荣耀的段位排行榜是通过Redis实现的?

目录 一、排行榜设计方案1、数据库直接排序2、王者荣耀好友排行 二、Redis实现计数器1、什么是计数器功能&#xff1f;2、Redis实现计数器的原理&#xff08;1&#xff09;使用INCR命令实现计数器&#xff08;2&#xff09;使用INCRBY命令实现计数器 三、通过Redis实现“王者荣…

Java注解与反射

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Java注解与反射 Java注解和反射是Java语言中两个强大的特性&#xff0c;它们可以一起使用以实现动态的、灵活的编程和元数据处理 注解 Java注解&#xff08;Annotatio…

c语言六子棋(Alpha-Beta剪枝算法)

c语言Alpha-Beta剪枝算法六子棋介绍 Alpha-Beta剪枝算法是一种用于优化博弈树搜索的算法&#xff0c;可以在搜索过程中减少不必要的计算&#xff0c;从而提高搜索效率。该算法常用于博弈游戏&#xff0c;如六子棋。 六子棋是一种类似于五子棋的棋类游戏&#xff0c;在一个六边形…

ubuntu20.04 编译安装运行emqx

文章目录 安装依赖编译运行登录dashboard压力测试 安装依赖 Erlang/OTP OTP 24 或 25 版本 apt-get install libncurses5-dev sudo apt-get install erlang如果安装的erlang版本小于24的话&#xff0c;可以使用如下方法自行编译erlang 1.源码获取 wget https://github.com/erla…

【大模型AIGC系列课程 3-2】国产开源大模型:ChatGLM

1. GLM https://arxiv.org/pdf/2103.10360.pdf GLM是General Language Model的缩写,是一种通用的语言模型预训练框架。它的主要目标是通过自回归的空白填充来进行预训练,以解决现有预训练框架在自然语言理解(NLU)、无条件生成和有条件生成等任务中表现不佳的问题。 具体来…