手把手教你使用SpringBoot做一个员工管理系统【代码篇·下】

news2024/11/25 6:39:21

手把手教你使用SpringBoot做一个员工管理系统【代码篇·下】

  • 1.增加员工实现
  • 2.修改员工信息
  • 3.删除员工
  • 4.404页面配置
  • 5.注销

1.增加员工实现

新增添加员工的按钮:

<h2><a class="btn btn-sm btn-success" th:href="@{/addemp}">添加员工</a></h2>

编写添加员工的controller:

/**
 * 跳转添加员工页面
 * @return
 */
@GetMapping("/addemp")
public String toAddPage(){
    return "emp/add";
}

添加前端页面,复制list页面,修改即可:

这里提供一个表单美化代码:

<form th:action="@{/addemp}" method="post">
     <div class="form-group"><label>LastName</label>
         <input class="form-control" placeholder="dahezhiquan" type="text" name="lastName">
     </div>
     <div class="form-group"><label>Email</label>
         <input class="form-control" placeholder="3390205563@qq.com" type="email" name="email">
     </div>
     <div class="form-group"><label>Gender</label><br/>
         <div class="form-check form-check-inline">
             <input class="form-check-input" name="gender" type="radio" value="1">
             <label class="form-check-label"></label>
         </div>
         <div class="form-check form-check-inline">
             <input class="form-check-input" name="gender" type="radio" value="0">
             <label class="form-check-label"></label>
         </div>
     </div>
     <div class="form-group"><label>department</label>
         <select class="form-control" name="department.id">
             <option th:each="dept:${departments}" th:text="${dept.getDepartmentName()}"
                     th:value="${dept.getId()}"></option>
         </select>
     </div>
     <div class="form-group">
         <label>Birth</label>
         <input class="form-control" placeholder="klza" type="text" name="birth">
     </div>
     <button class="btn btn-primary" type="submit">添加</button>
 </form>

来测试看一下效果吧:

在这里插入图片描述

现在来获取一下所有的department信息,传到前端展示:

引入DepartmentDao:

@Autowired
DepartmentDao departmentDao;

完善添加员工controller:

/**
 * 跳转添加员工页面
 *
 * @return
 */
@GetMapping("/addemp")
public String toAddPage(Model model) {
    // 查询所有的部门信息
    Collection<Department> departments = departmentDao.getDepartments();
    model.addAttribute("departments", departments);
    return "emp/add";
}

现在可以正常显示所有部门了!

在这里插入图片描述

开始开发具体的添加员工的控制器:

/**
 * 添加员工
 * 接收前端传递的参数,自动封装成为对象[要求前端传递的参数名,和属性名一致]
 *
 * @param employee 员工对象
 * @return
 */
@PostMapping("/addemp")
public String addEmp(Employee employee) {
    employeeDao.save(employee);
    // 回到员工列表页面,可以使用redirect或者forward,就不会被视图解析器解析
    return "redirect:/emps";
}

测试一下吧:

添加成功:

在这里插入图片描述


2.修改员工信息

我们要实现员工修改功能,需要实现两步;

  1. 点击修改按钮,去到编辑页面,我们可以直接使用添加员工的页面实现

  2. 显示原数据,修改完毕后跳回列表页面!

首先修改跳转链接的位置:

<a class="btn btn-sm btn-primary" th:href="@{/emp/}+${emp.getId()}">编辑</a>

编写对应的controller:

/**
 * 员工修改
 *
 * @param id    员工ID号
 * @param model
 * @return
 */
@GetMapping("/emp/{id}")
public String toUpdatePage(@PathVariable("id") Integer id, Model model) {
    Employee employee = employeeDao.getEmployeeById(id);
    model.addAttribute("emp", employee);

    // 查询所有的部门信息
    Collection<Department> departments = departmentDao.getDepartments();
    model.addAttribute("departments", departments);
    return "emp/update";
}

添加修改的模板页面,将add.html复制,表单修改为如下即可:

<form th:action="@{/updateemp}" method="post" >
    <input type="hidden" name="id" th:value="${emp.getId()}">
    <div class="form-group" ><label>LastName</label>
        <input th:value="${emp.getLastName()}" class="form-control" placeholder="kuangshen" type="text" name="lastName">
    </div>
    <div class="form-group" ><label>Email</label>
        <input th:value="${emp.getEmail()}" class="form-control" placeholder="24736743@qq.com" type="email" name="email">
    </div>
    <div class="form-group"><label>Gender</label><br/>
        <div class="form-check form-check-inline">
            <input th:checked="${emp.getGender()==1}" class="form-check-input" name="gender" type="radio" value="1">
            <label class="form-check-label"></label>
        </div>
        <div class="form-check form-check-inline">
            <input th:checked="${emp.getGender()==0}" class="form-check-input" name="gender" type="radio" value="0">
            <label class="form-check-label"></label>
        </div>
    </div>
    <div class="form-group" ><label>department</label>
        <select class="form-control" name="department.id">
            <option th:selected="${dept.id==emp.getDepartment().getId()}" th:each="dept:${departments}" th:text="${dept.getDepartmentName()}" th:value="${dept.getId()}"></option>
        </select>
    </div>
    <div class="form-group" >
        <label >Birth</label>
        <input th:value="${#dates.format(emp.birth,'yyyy/MM/dd')}" class="form-control" placeholder="2021-02-02" type="text" name="birth">
    </div>
    <button class="btn btn-primary" type="submit">修改</button>
</form>

现在先来测试一下修改页面的回显数据是否正常展示了:

在这里插入图片描述

现在来实现一下修改员工的控制器吧:

/**
 * 修改员工
 *
 * @param employee 员工对象
 * @return
 */
@PostMapping("/updateemp")
public String updateEmp(Employee employee) {
    employeeDao.save(employee);
    return "redirect:/emps";
}

3.删除员工

list页面,编写提交地址:

<a class="btn btn-sm btn-danger"  th:href="@{/delEmp/}+${emp.getId()}">删除</a>

编写删除员工的Controller:

/**
 * 删除员工
 *
 * @param id 员工ID
 * @return
 */
@GetMapping("/delEmp/{id}")
public String delEmp(@PathVariable("id") Integer id) {
    employeeDao.delete(id);
    return "redirect:/emps";
}

大功告成!👌


4.404页面配置

我们只需要在模板目录下添加一个error文件夹,文件夹中存放我们相应的错误页面;

比如404.html 或者 4xx.html 等等,SpringBoot就会帮我们自动使用了!

在这里插入图片描述


5.注销

在SpringBoot中,注销同样也很简单:

修改前端的注销代码:

<a class="nav-link" th:href="@{/user/logout}">注销</a>

编写控制器:

/**
 * 注销
 * 销毁session即可!
 * @param session
 * @return
 */
@RequestMapping("/user/logout")
public String logout(HttpSession session){
    session.invalidate();
    return "redirect:/index.html";
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0- LVGL移植基于野火STM32F429挑战者(LVGL8.2)

1-移植准备 LVGL8.2 野火STM32F429_v2开发板 因为ST在STM32F4之后所有的芯片都不在有标准库,因此本篇是基于HAL库的。同时现在有许多厂商都不在有标准库了,都是根据自己的开发环境进行一些基本芯片接口的配置。像NXP,ST等。 这里不过多介绍LVGL,既然看到这个文章,大多数是…

20221214英语学习

今日新词&#xff1a; minus prep.减去&#xff1b;&#xff08;温度&#xff09;零下 garlic n.【植】大蒜 linger v.停留&#xff0c;逗留&#xff1b;徘徊&#xff1b;继续留存&#xff0c;缓慢消失&#xff1b;苟延残喘 sarcastic adj.讽刺的, 嘲讽的, 挖苦的 data n.…

【LeetCode每日一题】——572.另一棵树的子树

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 树 二【题目难度】 简单 三【题目编号】 572.另一棵树的子树 四【题目描述】 给你两棵二叉树…

MySQL索引优化(二)

文章目录一、查询优化1. 索引失效&#xff08;1&#xff09;不满足最左前缀法则&#xff0c;索引失效&#xff08;2&#xff09;在索引列上做任何计算、函数操作&#xff0c;索引失效&#xff08;3&#xff09;存储引擎使用索引中范围条件右边的列&#xff0c;索引失效&#xf…

倪健中会长应邀出席首届世界数贸易博览会致辞:把杭州打造成全球数字贸易元宇宙之都

12月11日至14日&#xff0c;首届全球数字贸易博览会在浙江省杭州市盛大举办。博览会由浙江省人民政府和商务部联合主办&#xff0c;杭州市人民政府、浙江省商务厅和商务部贸发局共同承办&#xff0c;主题为“数字贸易商通全球”&#xff0c;爱尔兰为主宾国&#xff0c;北京、上…

大航海时代:葡萄牙、西班牙率先出发,英国为何成为最大赢家?

欧洲经历了长达千年的中世纪以后&#xff0c;忽然开始自我反省了。为啥&#xff1f;因为打了上千年&#xff0c;不仅社会没进步&#xff0c;反而因为各种瘟疫、战争&#xff0c;把人口搞掉了一大半。 这么玩下去&#xff0c;日耳曼人的各大分支&#xff0c;可能都要完犊子了&a…

基于java+springboot+mybatis+vue+mysql的智能热度分析和自媒体推送平台

项目介绍 前端页面&#xff1a; 功能&#xff1a;首页、文章信息、图片信息、视频信息、个人中心、后台管理 管理员后台管理页面&#xff1a; 功能&#xff1a;首页、个人中心、用户管理、文章类型管理、文章信息管理、图片类型管理、图片信息管理、视频类型管理、视频信息管…

数据工厂刷新PowerBI数据集2

前面已经介绍过数据工厂中刷新PowerBI数据集&#xff0c;我们先发起一个web请示获取了token&#xff0c;然后再把token传入到接口中从而刷新数据集。 但是&#xff0c;明明都是微软家的产品&#xff0c;竟然还需要先获取token?明明Power Apps、Power Automate里都不需要的啊&…

茶文化推广网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网型站前台&#xff1a;网站个介绍、帮助信总、茶文化、茶叶分享、讨论信总 管理功能&#xff1a; 1、管理网站介绍、帮…

刚做外贸,先做平台好还是独立站好?

作为亚马逊这样的平台卖家&#xff0c;依托平台完善的第三方服务和流量红利&#xff0c;很容易将产品卖到海外。如今&#xff0c;随着平台要求越来越严格&#xff0c;管理政策越来越多变&#xff0c;用户需求也越来越多样化和苛刻&#xff0c;卖家在平台上经营店铺的一些问题正…

[附源码]Python计算机毕业设计SSM基于Web的摄影爱好者交流社区(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Clone使用

实现克隆接口:clone方法是默认是Object的方法 1)这个接口是一个标记性的接口(空接口)&#xff0c;他们内部都没有方法和属性&#xff0c;实现这个接口表示这个对象都可以进行克隆&#xff0c;我们调用Object对象的Object.clone()方法&#xff0c;如果没有实现Cloneable的类对象…

【云原生】k8s声明式资源管理

内容预知 1.资源配置清单的管理 1.1 查看资源配置清单 1.2 修改资源配置清单并应用 离线修改 在线修改 1.3 删除资源配置清单 2.自主编写资源清单 2.1 初步认识资源清单中svc的重要配置项 2.2 手动编写 svc资源配置 3.手动生成模板&#xff0c;再编写资源清单 &#x…

解决虚拟机IP地址无法获取和网络无法连接

首先看一下电脑的end33分配成功没有 ifconfig或者使用ip addr查询都可以 ip addr 目录 1.首先看看你的网络连接模式是不是NAT 2.去主机电脑服务查看这四个服务是否开启 3.查看虚拟机子网ip是否分配了 4.修改我们的网卡配置文件&#xff0c;使用下面命令进入文件 5.重启网…

jemeter 压测并生成报告

文章目录前言一、压测步骤1.1 创建jvm文件1.2 压测生成测试文件及html压测结果二、结果分析前言 jmeter&#xff1a;是Apche公司使用Java平台开发的一款测试工具。 一、压测步骤 1.1 创建jvm文件 添加测试计划 &#xff08;当打开jmeter默认有一个测试计划&#xff09;添加…

高并发下解决AtomicLong性能瓶颈的方案——LongAdder

一、 LongAdder简介 LongAdder类是JDK1.8新增的一个原子性操作类。上一节说到&#xff0c;AtomicLong通过CAS提供了非阻塞的原子性操作&#xff0c;相比用阻塞算法的synchronized来说性能已经得到了很大提升。在高并发下大量线程会同时竞争更新同一个原子变量&#xff0c;但由…

Qt 模型视图编程之重置模型数据

背景 Qt 模型视图编程中模型定义了标准接口对数据进行访问&#xff0c;可根据需求继承对应的抽象模型类来实现自定义的数据模型。一个基本的数据模型至少要实现以下虚函数&#xff1a; ①&#xff0e;rowCount&#xff1a;行数&#xff0c;返回要显示多少行&#xff1b; ②&…

软件工程---习题六

4. 图6.18给出的程序流程图代表一个非结构化的程序&#xff0c;问:   &#xff08;1&#xff09;为什么说它是非结构化的&#xff1f;   答&#xff1a;通常所说的结构化程序&#xff0c;是按照狭义的结构程序的定义衡量&#xff0c;符合定义规定的程序&#xff0c;每个代码…

【操作系统】模式切换篇

CPU的模式 什么是CPU的模式&#xff1f;这和CPU的发展过程有关&#xff0c;最开始CPU是8位的&#xff0c;后来发展到16位&#xff0c;然后是32位&#xff0c;现在是64位&#xff0c;多少多少位指的是寄存器的位宽。CPU能使用的寄存器宽度以及CPU使用的指令等就构成了CPU的模式…

传统ERP管理项目有哪些问题?项目ERP系统哪个好?

8Manage FAS 是专为基于项目的公司设计的企业资源规划系统&#xff08;ERP系统&#xff09;。基于项目的公司包括建筑、工程和施工操作 (AEC)、产品要订购制造 (ETO) 和各种其他类型的专业服务公司 (PSO)。 对任何公司来说&#xff0c;无论在什么行业&#xff0c;项目对其业务…