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.mzph.cn/news/594572.shtml

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

相关文章

B端产品经理学习-需求挖掘

B端产品需求挖掘 目录 识别和管理干系人 决策人和负责人需求挖掘 针对用户进行需求挖掘 用户访谈结果整理 B端产品的需求来源是非常复杂的,要考虑多个方面;如果你是一个通用性的产品,要考虑市场、自身优劣势、干系人。而定制型B端产品会…

uniapp:签字版、绘画板 插件l-signature

官方网站:LimeUi - 多端uniapp组件库 使用步骤: 1、首先从插件市场将代码下载到项目 海报画板 - DCloud 插件市场 2、下载后,在项目中的uni_modules目录 3、最后 没有其它步骤,直接官网代码复制到vue文件中就可以了&#xff0c…

综合跨平台全端ui自动化测试框架Airtest——AirtestIDE录制微信小程序脚本教学

前言 有在自动化测试领域的小伙伴应该都知道,app和小程序自动化这一类的自动化测试在实际操作中有时候很棘手让人心烦,动不动就是用appium写代码脚本维护什么的,不仅步骤繁琐,环境配置方面也是繁琐无比,动不动就与客户…

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-1+2课程介绍+电路系统建模、基尔霍夫定律

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-12课程介绍电路系统建模、基尔霍夫定律 1. 课程介绍2. 电路系统建模、基尔霍夫定律 1. 课程介绍 2. 电路系统建模、基尔霍夫定律 基本元件: 电量 库伦&…

多模态——旷视大模型Vary更细粒度的视觉感知实现文档级OCR或图表理解

概述 现代大型视觉语言模型(LVLMs),例如CLIP,使用一个共同的视觉词汇,以适应多样的视觉任务。然而,在处理一些需要更精细和密集视觉感知的特殊任务时,例如文档级OCR或图表理解,尤其…

前缀和算法 -- 寻找数组的中心坐标

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本题链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 输入描述 给定一个数组&#xff0c;接口为int pivotIndex(vector<int>& nums) 输出描述 我们以示例1为例画图解释&#xf…

DRF从入门到精通七(djangorestframework-simplejwt、定制返回格式、多方式登录)

文章目录 一、djangorestframework-simplejwt快速使用1.基础使用步骤2.自己配置视图校验访问局部配置认证及权限类全局配置认证及权限类 3.关于双token认证问题 二、定制返回格式三、多方式登录 一、djangorestframework-simplejwt快速使用 JWT主要用于签发登录接口需要配合认证…

频谱论文:约束飞行轨迹下基于生成对抗网络的三维无线电地图重构

#频谱# T. Hu, Y. Huang, J. Chen, Q. Wu and Z. Gong, "3D Radio Map Reconstruction Based on Generative Adversarial Networks Under Constrained Aircraft Trajectories," in IEEE Transactions on Vehicular Technology, vol. 72, no. 6, pp. 8250-8255, June …

Vue - 多行文本“展开、收起”功能

TextClamp 使用 js 实现文本展开、收起&#xff0c;并非纯 CSS 实现。 Props&#xff1a; fontSize&#xff1a;Number&#xff0c;默认&#xff1a;14lines&#xff1a;Number&#xff0c;默认&#xff1a;1lineHeight&#xff1a;Number&#xff0c;默认&#xff1a;20 F…

字符编码转换

宽窄字符和字符编码的关系 多字节(窄)字符&#xff1a;在C/C中&#xff0c;char是一种数据类型&#xff0c;规定sizeof(char)1&#xff0c;即一个char占用一个字节&#xff0c;1Byte8bit。并没有规定一个char就要与ASCII对应&#xff0c;不过&#xff0c;通常情况下char值与AS…

2023 年博客总结

当无所事事&#xff0c;没有多少收获的时候&#xff0c;时间过得格外的快… 当充实有为&#xff0c;经常有收获有进步的时候&#xff0c;才觉得时间没有浪费… 2023年收获不多… 以前说孩子小&#xff0c;需要照顾所以没时间&#xff0c;我以为孩子大点就有时间了&#xff0c;…

图片处理相关网站(图片分辨率、尺寸修改、AI扩图等)

分享一些免费的可进行图片的各种处理的网站&#xff0c;包括图片分辨率、尺寸修改、AI扩图等&#xff0c;持续增加中。。。 1.photokit.com 可进行图片分辨率、尺寸、压缩等修改。 免费在线图片编辑器 - 在线抠图、改图、修图、美图 - PhotoKit.comPhotoKit是一款免费的…

【RocketMQ每日一问】RocketMQ SQL92过滤用法以及原理?

1.生产端 public class SQLProducer {public static int count 10;public static String topic "xiao-zou-topic";public static void main(String[] args) {DefaultMQProducer producer MQUtils.createLocalProducer();IntStream.range(0, count).forEach(i -&g…

自动化测试面试题及答案大全(上)

selenium中如何判断元素是否存在&#xff1f; 没有提供原生的方法判断元素是否存在&#xff0c;一般我们可以通过定位元素异常捕获的方式判断selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 不可以&#xff0c;想点击的话&#xff0c;可以用…

[ASIS 2019]Unicorn shop

点入题目看见四个可购买的东西&#xff0c;但是都购买不了&#xff0c;最后一个价格大的脱俗&#xff0c;猜测成功买到后会得到flag&#xff0c;但是购买时提示操作失败只允许一个字符。查看源码发现在utf-8后面特意标注提示 涉及到了字符编码和字符集的概念&#xff1a; UTF-…

2024 年度 AAAI Fellows 揭晓!清华大学朱军教授入选!

今日&#xff0c;国际人工智能领域最权威的学术组织 AAAI 揭晓 2024 年度 Fellows 评选结果&#xff0c;新增 12 位 Fellow。 其中&#xff0c;清华大学计算机系教授朱军因「在机器学习理论与实践方面做出的重大贡献」而成功入选&#xff0c;成为本年度入选的唯一华人学者&…

2023最大技术潮:大模型冲击下的智能汽车

作者 |德新 编辑 |王博 过去这年最大的技术潮&#xff0c;非大模型莫属。 2023年初&#xff0c;由ChatGPT掀起的浪花&#xff0c;迅速地演变成了席卷全球的AI科技浪潮。汽车行业在其中也不可避免。各大车企纷纷投入与大模型相关的布局。 长城官宣成立了AI Lab&#xff0c;到…

尝试解决 H5无法播放mp3录音问题

1.问题描述 将H5传递的录音 media_id 通过微信获取临时素材接口获取到录音文件流之后&#xff0c;转为mp3文件上传到服务器。但是H5却没办法播放这个mp3文件。这个文件只能在播放器上播放&#xff0c;比如网易云什么的。不能直接在微信&#xff0c;浏览器上播放 2.原因分析 通…

山西电力市场日前价格预测【2024-01-04】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-04&#xff09;山西电力市场全天平均日前电价为197.93元/MWh。其中&#xff0c;最高日前电价为376.04元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

Go语言基础简单了解

文章目录 前言关于Go学习流程 基础语法注释变量常量数据类型运算符fmt库 流程控制if、switch、selectfor、break、continue遍历String 函数值传递和引用传递deferinit匿名、回调、闭包函数 数组和切片Map结构体自定义数据类型接口协程和channel线程锁异常处理泛型文件读取文件写…