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

news2024/11/16 1:19:31

注:此为笔者学习狂神说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.coloradmin.cn/o/1353909.html

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

相关文章

Git(1):Git概述

1 开发中的实际场景 场景一:备份 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流 场景二:代码还原 这个项目中需要一个很复杂的功能&#x…

多核调度预备知识

问题 内核对进程调度时发生了什么? 进程调度的本质 任务 / 进程 切换 即:上下文切换,内核对处理器上的执行的进程进行切换"上下文" 指:寄存器的值"上下文切换" 指: 将寄存器的值保存在内存中 (…

odoo 客制化审批流

以BPM、OA为代表的应用平台,低代码处理为前提的审批流功能定制化 功能介绍: 业务对象:针对侵入式注册BPM业务场景:设置审批场景:如:请假大于三天的场景、金额大于1000的场景节点条件: 当符合某…

力扣题:高精度运算-1.2

力扣题-1.2 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:415. 字符串相加 解题思想:从后往前遍历两个字符串,然后进行相加即可 class Solution(object):def addStrings(self, num1, num2):""":type num1: str:type …

专题一_双指针(一)

文章目录 283.移动零题目解析讲解算法原理扩展编写代码 1089.复习零题目解析讲解算法原理编写代码 202.快乐数题目解析讲解算法原理证明编写代码 11.盛最多水的容器题目解析讲解算法原理暴力解法优秀的解法时间复杂度分析 编写代码 283.移动零 题目链接 题目解析 题目还是比较…

flex实现间距相等的table布局

<!DOCTYPE html> <html> <head><style>.container {width: 800px;display: flex;flex-wrap: wrap;gap: 20px;border: 1px solid #ddd;margin: 20px;}.cell {width: calc(50% - 10px); /* 每列占据一半宽度&#xff0c;减去间隙的宽度 */background-col…

把Canvas捡起来吧!

canvas介绍 canvas是HTML5新增的一种新特性&#xff0c;一种使用JavaScript绘制图形的HTML元素。 基本使用 <canvas id"example" width"300" height"300" />使用 矩形&#xff1a; var canvas document.getElementById("examp…

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …

源支付V7最新修复版,V2.7.9最新版

源支付V7最新修复版&#xff0c;V2.7.9最新版 注&#xff1a;开发不易&#xff0c;仅限交流学习使用&#xff0c;如商业使用&#xff0c;请支持正版&#xff01; 轻量化的界面 UI, 提供更加便捷的操作体验&#xff0c;让您的系统一目了然 推荐支付宝当面付 - 免 CK - 商家版&a…

JavaScript密码加密解密(纯代码-可直接拉取使用)

抽成组件rsaEncrypt.js import JSEncrypt from jsencrypt/bin/jsencrypt// 密钥对生成 http://web.chacuo.net/netrsakeypairconst publicKey MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n 2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgk…

【NeRF数据集】LLFF格式数据集处理colmap结果记录

【NeRF数据集】LLFF格式数据集处理colmap结果记录 1. 基于colmap的配置与运行&#xff0c;获取图像及其对应的相机位姿&#xff1b;2. 使用 LLFF格式数据集制作&#xff0c;将匹配的位姿转化为LLFF格式&#xff1b;3. 上传所需文件和设置配置文件&#xff0c;将所需文件上传至N…

numpy数组05-numpy的索引和切片

numpy中可以对其中的某一行&#xff08;列&#xff09;进行数据处理。 上节课我们已经取出了CSV文件中的二维数组&#xff0c;本次对这个二维数组为例&#xff0c;进行练习操作。 示例代码如下&#xff1a; import numpy as npus_file_path "US_video_data_numbers.cs…

5大自动化测试的Python框架,看完就能涨薪5k 【实用干货】

目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因此&#xff0c;开发与测试人员在为手头的项目选择测试框架时&#xff0c;需要考虑许多方…

FX3U-1PG使用

作为扩展模块的安装 伺服驱动器的参数设置 1.设置为0&#xff0c;为位置模式&#xff0c;发送脉冲控制&#xff1b; 2. 设置旋转方向&#xff0c;以及脉冲方式&#xff0c;通常设置为01&#xff0c;因为FX3U-1PG只支持正方向脉冲负方向脉冲方式&#xff1b; 当然想改变电机运…

显化的跨渠道整合:迅腾文化助力企业拓展销售渠道

显化的跨渠道整合&#xff1a;迅腾文化助力企业拓展销售渠道 在数字化浪潮的推动下&#xff0c;企业的销售渠道日趋多元化。面对复杂多变的市场环境&#xff0c;企业需要一种有效的方式来整合各个销售渠道&#xff0c;以实现更高效的销售拓展。广州迅腾文化传播有限公司的显化…

MySQL中的六种日志你都懂么?不懂!那就必须看看

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Linux 进程(七) 进程地址空间

虚拟地址/线性地址 学习c语言的时候我们经常会用到 “&” 符号&#xff0c;以及下面这张表&#xff0c;那么取出来的地址是否对应的是真实的物理地址呢&#xff1f;下面我们来写代码一步一步的验证。 从上面这张图不难看出&#xff0c;从正文代码&#xff0c;到命令行参数环…

当你明白了这句话,你就开始赚到钱了

哈喽&#xff0c;大家好啊&#xff0c;我是雷工&#xff01; 曾经看到稻盛和夫说过这么一句话&#xff1a; 其实钱并不是赚来的&#xff0c;而是你帮助别人解决问题后给你的回报。 这天发生了件小事&#xff0c;让我对这句话有了更深的认识。 一、 缘起 自从开始记笔记&…

洗地机有没有必要买?家用洗地机推荐

随着生活水平的提高&#xff0c;人们对家居环境的卫生和清洁要求也相应提高&#xff0c;因此家用洗地机作为一种现代化的清洁工具逐渐受到了广泛关注和青睐。那么&#xff0c;洗地机到底有没有必要买? 洗地机对于一些家庭确实是非常有必要的&#xff0c;特别是对于工作繁忙、…

springboot整合webservice使用总结

因为做的项目中用到了webservice,所以在此总结一下。 一、webservice简介 Web Service也叫XML Web Service, WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求&#xff0c;轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务&#xff0c;使…