SpringBoot学习(三)-员工管理系统开发(重在理解)

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!!
本文是基于狂神老师SpringBoot教程中的员工管理系统从0到1的实践和理解。该系统应用SpringBoot、SpringMVC、Mybatis、thymeleaf模板引擎的等框架,方便读者理解网站搭建流程和注意点。本文重在理解,建议和代码结合理解,并实践。

员工管理系统

1、准备工作

  • 去bookstarap 模板中下载

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 导入页面

在这里插入图片描述

  • 资源放在static上面

在这里插入图片描述

  • 创建实体类

在这里插入图片描述

  • 导入依赖 lombok 会使@data:会将属性用到的方法:set、get、tostring,有参和无参构造方法自动装配

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 创建模拟数据库

在这里插入图片描述

加上注解@Repository

在这里插入图片描述

在这里插入图片描述

将有参构造的注解@删除,由于 时间 一般情况下,都是默认配置的,所以自己配的话,可以通过有参函数中,new Date()赋给 时间属性,否则,不删掉有参构造(有Date属性)的注解,将会导致赋值时,难办。

在这里插入图片描述

引用类型Department要加上 new ,因为加载资源的方式,是先静态static,再到@Autowired的资源的

在这里插入图片描述

添加数据库的基本操作

在这里插入图片描述

在这里插入图片描述

2、首页实现

  • 不建议在 controller 这里配置,最好去 config 中的springmvc扩展配置中配置,但是css静态资源加载不进来。

在这里插入图片描述

  • 注:如果有几个项目有网站的,若没关,都会占用8080端口的,导致项目的网站运行不出来,可以改一下端口;或移除其他项目。
  • 如下,效果一样,但是css静态资源加载不进来。

在这里插入图片描述

  • 所以需要把下载过来的模板修改为 Thymeleaf模板引擎所支持的 格式结构,对照Thymeleaf的支持文档(去官网下载)

在这里插入图片描述

1)修改登录界面

  • 修改加载的格式,让静态资源css可以被加载进来

在这里插入图片描述

  • 更改测试的时候,可以关闭Thymeleaf的模板缓存
  • 修改完,记得开启模板引擎的缓存,不然跑不起来

在这里插入图片描述

  • 清理浏览器的缓存

在这里插入图片描述

  • 主要是修改静态资源的链接,在前面加 th: 然后会发现资源的图标恢复

在这里插入图片描述

2)修改404页面

在这里插入图片描述

  • 不用改在线链接,只改本地的

在这里插入图片描述

3)修改dashboard页面

在这里插入图片描述

4)修改list页面

在这里插入图片描述

  • 用了 @ 符号的的好处: @ 之后的 (/)相当于万能目录classpath,可以万能匹配 不管项目的http链接怎么变,都能加载到静态资源
  • 配置了sever.servlet.context-path= 后, 8080会失效的

在这里插入图片描述

在这里插入图片描述

  • 结论
    1.首页配置:注意点,所有页面的静态资源都需要使用thymeleaf接管;

3、页面国际化

1)准备国际化的东西

  • 创建 i18n 文件夹(国际化的缩写)

在这里插入图片描述

  • 手动添加配置文件

在这里插入图片描述

  • idea的可视化视图:可以映射到配置文件

在这里插入图片描述

在这里插入图片描述

  • 要去看源码,我们自己正常配置的,理解SpringBoot怎么识别国际化的

在这里插入图片描述

赋值的

在这里插入图片描述

  • 通过源码找到SpringBoot自动装配的默认配置信息,这样自己才知道,自己要配多少,才有用

在这里插入图片描述

2)修改全局配置文件

  • 在配置文件中配置国际化,让国际化生效

在这里插入图片描述

  • 国际化消息的 格式标签:去查Thymeleaf文档

在这里插入图片描述

  • 先修改一个,看#{}格式是否生效,别一下子全部改完

在这里插入图片描述

修改不成功

在这里插入图片描述

修改一下:

在这里插入图片描述

  • 理解赋的值放里面和外面的区别:一般像按钮、选择框等控件放外面才生效,一般的基本信息赋值放里面就可以了,基本用 th:text ,其余看语境。

    在这里插入图片描述

3)实现点击 按钮 *改变国际化的信息

在这里插入图片描述

  • 去看官方文档,知道自己该配置什么东西

在这里插入图片描述

找到MessageCodeResolver

在这里插入图片描述

查找AcceptHeaderLocalContextResolver类

在这里插入图片描述

又去找一下RequestMappingHandlerMapping类

在这里插入图片描述

找到了localeResolver类,理解里面的要求 ,为我们用户自配找到依据
什么什么default就是默认的!!!!!!!

在这里插入图片描述

  • @ConditionalOnMissingBean:生效的话,会让bean失效,按照这里的意思,就是说,如果有用户自定义配置,就会让SpringBoot自动装配的bean失效。

找到AcceptHeaderLocaleResolver类去看看

在这里插入图片描述

  • 得知这个类继承了LocaleResolver地区解调器接口,

在这里插入图片描述

  • 实现自己的LocaleResolver国际化解析器==实现地区解调器接口

    依据

    在这里插入图片描述

在这里插入图片描述

  • 具体操作

    在这里插入图片描述

  • 一点击按钮, l 就会把消息传到后端

在这里插入图片描述

  • 解析请求

在这里插入图片描述

在配置类中,注册国际化组件的@bean到SpringBoot中

在这里插入图片描述

修改:

在这里插入图片描述

  • default打开页面默认的语言界面,由于浏览器默认一开始就是中文的,所以语法出错,也会返回中文

结果

在这里插入图片描述

  • 结论

在这里插入图片描述

4、登录功能实现

1)测试跳转功能

  • 修改index.html页面

在这里插入图片描述

  • 创建Logincontroller类,注:先测试一下能否正常跳转页面,写一步,测一步

在这里插入图片描述
在这里插入图片描述

2)前端传输数据到后端,并验证登录

  • 修改index.html页面

在这里插入图片描述

  • 后端获取数据。注:有@ResponseBody就跳不了视图,想要跳视图,把它去掉

在这里插入图片描述

在这里插入图片描述

  • 修改后,登录成功,但是登陆失败后,没有提示

在这里插入图片描述

3)登陆失败信息回传

  • 修改index页面,让回传信息msg,有地方放和显示
  • 去网页审查元素,定位一下,可以在那放回传的提示信息

在这里插入图片描述

  • 定位标签

    在这里插入图片描述

  • 去Thymeleaf.pdf里,找判断参数是否为空的方法

    在这里插入图片描述

  • 修改一下index页面,isEmpty(msg):msg是否为空,不为空,返回 false,not+false=true,显示文本。

在这里插入图片描述

在这里插入图片描述

4)登陆成功之后,URL有问题

  • 思路

​ 访问那个页面,能映射过来就好了

在这里插入图片描述

  • 在管理映射路径的类里修改,此程序在 MyMvcConfig 中

在这里插入图片描述

  • 修改LoginController,登录验证成功后,添加:redirct:/ 让页面跳转,更像网页跳转的情况,一个接一个

在这里插入图片描述

  • 问题:无论登不登录,都能进后台页面,所以要配置 拦截器 !!!!!!!!!!

    在这里插入图片描述

5)登录拦截器

  • 创建 自定义拦截器LoginHandlerInterceptor 继承 HandlerInterceptor拦截器接口

在这里插入图片描述

  • 登录成功后,用户名自定义设置显示

在这里插入图片描述

  • 登录成功后,获得了参数 loginUser ,返回true,随便切换都行

在这里插入图片描述

  • 在用户 自定义配置的类MyMvcConfig里面,声明这个拦截器方法(并不需要注册成一个bean,声明就好)

在这里插入图片描述

  • 修改Dashboard的元素Company name

在这里插入图片描述

  • 修改dashboard页面

在这里插入图片描述

  • 效果:用同一个浏览器会有缓存,也可以直接访问的,所以 清理浏览器缓存 或者 关掉浏览器 ,或者 换一个浏览器。

在这里插入图片描述

  • 过程

    继承接口→添加参数并设置username→拦截器条件构造→声明拦截器与拦截链接

5、展示员工列表

1)自己的员工查询页面

  • 登录功能已经实现,接下来修改前端员工的的列表展示,点员工管理,然后跳到 自己的员工查询页面

修改dashboard页面,去掉多余的效果标签(CSS)

在这里插入图片描述

复制一份list.html到emp中,以便区分

在这里插入图片描述

新建EmployController类,用来跳转页面,并设置数据

在这里插入图片描述

实现页面的一连串跳转

在这里插入图片描述

修改list.html页面,让点击了 员工管理 跳转到list页面

在这里插入图片描述

在这里插入图片描述

实现点击 list页面 的跳转循环

在这里插入图片描述

2)抽取界面元素Fragments的 insert标签

主界面和从界面的界面元素相同的话,抽取相同的界面元素

在这里插入图片描述

commons页面路径,main页面路径下的哪一个位置

在这里插入图片描述

抽取侧边栏,它可以作为一个组件,插入到其他页面

在这里插入图片描述

插入 list页面 中,注意格式

在这里插入图片描述

插入后效果是一样的

在这里插入图片描述

删掉list的顶部栏,也使用插入的

在这里插入图片描述

修改dashboard页面的顶部导航栏,使用 th:fragment=""定义可引用的部分

在这里插入图片描述

将dashboard页面的顶部导航栏作为控件,插入到list页面,效果和自定义的一样

在这里插入图片描述

3)替换界面元素的Fragment的 replace标签,可以理解为引用

  • 引用的话,就可以,传递参数

新建一个 commons界面 (不显示,作为工具页面),作为公共界面,用来replace,并实现 改一个地方,其它地方同时生效

在这里插入图片描述

修改公共页面commons,将 首页 点击设为 main.html ,跳转到登陆成功后的第一个页面

在这里插入图片描述

在这里插入图片描述

修改dashboard和list页面,实现代码的复用,都

在这里插入图片描述

在这里插入图片描述

效果:

在这里插入图片描述

4)设置点击的光标

在这里插入图片描述

在这里插入图片描述

在dashboard和list页面发送光标参数main.html

在这里插入图片描述

在这里插入图片描述

在commons中接收光标参数main.html,并设置条件语句判断,有接收到,则亮,没有接收到,则不亮

在这里插入图片描述

在这里插入图片描述

效果

在这里插入图片描述

  • 可以理解为 引用,然后传参数

在这里插入图片描述

5)list显示员工的信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

td:加粗、居中

添加操作

在这里插入图片描述

在这里插入图片描述

springboot内部嵌入了一些CSS样式,所有只要指定类,就可以自动使用 类选择器,来修饰按钮
显示出现问题,修改就好

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 显示信息过程:

添加表格表项→添加dao取出的数据(注意中间参数)→添加管理操作(注意CSS样式)→修改信息的格式(查表)

6、添加员工实现

1)按钮提交

  • 步骤如下:

在这里插入图片描述

  • 添加添加按钮,添加超链接

在这里插入图片描述

点击后的请求是get请求

2)设置链接的跳转

  • 添加add页面

复制一份list.html,命名为add.html,只需修改表单部分即可

在这里插入图片描述

  • 表单添加的位置

在这里插入图片描述

3)找表单样式

  • 找表单样式,去bookstrap找

在这里插入图片描述

  • 找自己喜欢的表单,改就好了

在这里插入图片描述

  • 表单形式

在这里插入图片描述

4)修改表单的内容

  • 先复制一份 list.html 到 add.html 中

  • 添加各自的name属性(没有name,无法提交),并对应实体类的属性

在这里插入图片描述

  • name和value:name一定要对应实体类的信息,否则后续操作,会报错,数据传输错误

5)获取数据

  • 利用dao,获取departments的所有部门数据

在这里插入图片描述

model传递参数,内容就是:所有部门的数据,传入页面当中去

  • 修改下拉列表的部门数据

在这里插入图片描述

在这里插入图片描述

6)表单链接的特殊用法post

  • 同一个链接的不同的用法,区分开来,方便接收后,功能的实现在这里插入图片描述

  • Post接收,专门用于接收表单的链接

在这里插入图片描述

  • 先保证逻辑是对的,然后再往下,写代码,逻辑不能错
  • 注意:redirect的使用格式: redirect:/emps,别用中文输入法输入。
  • 区分forward和redirect:去找thymeleaf的源码中的视图解析器

在这里插入图片描述

  • 理解视图解析器里面的内容

在这里插入图片描述

7)保存员工信息

  • 保存员工信息,并显示在页面上

在这里插入图片描述

  • 处理错误

在这里插入图片描述

8)遇到问题

在这里插入图片描述

绑定数据失败,验证employee失败了

在这里插入图片描述

9)格式问题

springboot自动配置了 dd/mm/yyyy

在这里插入图片描述

在这里插入图片描述

  • 格式错了!!!

找源码,看底层,默认的

在这里插入图片描述

找默认配置信息的另一种方法:从application.properties中找

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

所以,自定义的格式会报错,因为程序采取默认的格式,这是springboot自动装配的原因

  • 自定义的时间格式:需要在application.properties配置

在这里插入图片描述

  • 注意点

在这里插入图片描述

  • 我们接收的是一个对象:employee,只需要提交一个属性:id

  • save()方法保存一个指定id的employee

  • 总结:设置按钮,添加超链接→在controller中设置链接跳转链接→修改表单内容th→在controller中利用引用类型dao,来获取数据,设置传输参数→设置表单跳转链接→保存信息→处理格式问题

7、修改员工信息

1)创建update页面

在这里插入图片描述

2)将属性id作为链接参数

在这里插入图片描述

在这里插入图片描述

3)设置跳转的的链接

获取id数据

在这里插入图片描述

4)修改映射update对应的员工属性信息

  • 如果页面加载不出来,可以重新加载一下,或者重启idea

在这里插入图片描述

  • 查出部门信息,方便页面的修改

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

报错:

在这里插入图片描述

解决:

在这里插入图片描述

点击编辑效果:

在这里插入图片描述

5)员工修改保存操作

在这里插入图片描述

在这里插入图片描述

  • 和增加员工的操作没有本质的区别

在这里插入图片描述

在这里插入图片描述

6)报错解决

①时间格式报错

在这里插入图片描述

②修改后员工id自增

在这里插入图片描述

在这里插入图片描述

  • 携带id的隐藏域,将id隐藏起来,这样主键自增会识别是不是新的id,不是,就可以实现修改对应员工信息了,而不至于增加新的员工信息

在这里插入图片描述

  • 总结:创建update页面→将属性id作为链接参数→设置跳转链接(并获取id数据)→修改映射update对应的员工属性信息→员工修改保存操作,设置表单跳转链接→格式报错问题

8、删除员工及404处理

1)修改 list.html 页面

在这里插入图片描述

2)添加跳转链接和删除操作

404不需要设置跳转,遇到报错,它会自动跳转

所以"redirect:/emps"返回正常list列表即可

在这里插入图片描述

3)添加404

在这里插入图片描述

  • 404这个数字可以自己设定,就是html的名字

在这里插入图片描述

在这里插入图片描述

  • 总结:修改list页面→添加跳转链接和删除操作→添加404

9、注销功能

在这里插入图片描述

在这里插入图片描述

  • 重点:href链接+Cotroller的链接跳转设置
  • 总结:修改common页面的注册链接 → 设置跳转链接操作 → 并删除用户名,让登录名失效,踢出

笔者已经实践过上述提到的功能,方案确实可行。阅读和理解本笔记可以对读者如何使用SpringBoot简单搭建web应用起引导作用,若读者需要实践,可以去狂神老师的公众号或视频下载基础代码加深理解。

SpringBoot学习(三)-员工管理系统开发理解的学习笔记到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

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

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

相关文章

Unity 基于UDP实现本地时间与网络时间校验 防客户端修改日期作弊

新建一个Unity GameObject 挂上NTPComponent脚本 时间校验 源码 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using UnityEngine.Networking; using System.Text; using System.Net.Sockets; using System.Net; using Sys…

守护进程“独辟蹊径”

守护进程“独辟蹊径” 一、前言二、实际运用2.1 知识介绍2.2 单机库场景应用2.2.1 配置dmwatcher.ini2.2.2 注册后台守护服务2.2.3 配置dmmal.ini2.2.4 配置归档和守护OGUID2.2.5 开启mal2.2.6 启动守护2.2.7 测试dmserver异常退出 三、总结 DM技术交流QQ群:9401242…

K8Spod组件

一个pod能包含几个容器 一个pause容器(基础容器/父容器/根容器) 一个或者多个应用容器(业务容器) 通常一个Pod最好只包含一个应用容器,一个应用容器最好也只运行一个业务进程。 同一个Pod里的容器都是运行在同一个node节点上的,并且共享 net、…

解决Gitlab Prometheus导致的磁盘空间不足问题

解决Gitlab Prometheus导致的磁盘空间不足问题 用docker搭建了一个gitlab服务,已经建立了多个项目上传,但是突然有一天就503了。 df -TH查看系统盘,发现已经Used 100%爆满了。。。 💡Tips:/dev/vda1目录是系统盘目录。…

STM32 基础知识(探索者开发板)--135讲 ADC转换

ADC定义: ADC即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换 ADC数模转换中一些常用函数: 1. HAL_ADC_Init 函数 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC 形参&…

python大于等于小于等于,python大于等于怎么写

大家好,小编为大家解答python中大于等于且小于等于的问题。很多人还不知道python大于号小于号如何运用,现在让我们一起来看看吧! 大家好,小编来为大家解答以下问题,python中大于并小于一个数代码,python 大…

2016年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天我们来看2016年的AMC8竞赛真题的典型考题和解析,最后利用碎片化时间冲刺,查漏补缺,提高成绩。温馨提示:2024年AMC8比赛现在还可以报名,自由报名截止到1月7日,我这里有官方自由报名通道。后续官方模拟题…

SLURM作业管理系统之3种作业提交方式

文章目录 前言定义基本概念三种作业提交模式1. 批处理作业(采用 sbatch 命令提交)2. 交互式作业提交(采用 srun 命令提交)3. 分配模式作业(采用 salloc 命令提交) 管理节点部署Slurm常用命令 前言 在高性能…

数据分析基础之《numpy(6)—IO操作与数据处理》

了解即可,用panads 一、numpy读取 1、问题 大多数数据并不是我们自己构造的,而是存在文件当中,需要我们用工具获取 但是numpy其实并不适合用来读取和处理数据,因此我们这里了解相关API,以及numpy不方便的地方即可 2…

关于“Python”的核心知识点整理大全59

目录 19.3.2 将数据关联到用户 1. 修改模型Topic models.py 2. 确定当前有哪些用户 3. 迁移数据库 注意 19.3.3 只允许用户访问自己的主题 views.py 19.3.4 保护用户的主题 views.py views.py 19.3.6 将新主题关联到当前用户 views.py 往期快速传送门&#x1f44…

人工智能教程(四):概率论入门

目录 前言 TensorFlow 入门 SymPy 入门 概率论入门 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站 在本系列的 上一篇文章 中,我们进一步讨论了矩阵和线性代数&#…

【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…