注:此为笔者学习狂神说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连再起飞吧



















