目录
一.部门管理
1.查询部门
过程中出现了这么一个报错
通过查询发现是jdk版本设定了11而我的jdk版本是8,找了一会需要修改的地方,下面是一处
这是另一处
项目跟着视频的思路,第一个功能看了三四遍才跟上他的思路和速度,成功跑出了查询所有部门数据的功能。
2.删除部门
- 详细阅读接口文档进行编写,(删除部门接口)
- @PathVariable——接受路径参数
- 删除报错
方法参数与输入参数类型不匹配,将{id}改成5,即可正确完成删除操作
3.新增部门
- 报错
sql语法错误,仔细对照,发现了敲写错误的地方,此处”{”应为“(“,而”(”应为“{“
新增接口测试成功
- 前端页面打不开
解决:没有运行nginx.exe,点击运行即可
- 联调新增成功
- 将方法发的路径抽离出来,放在类上
4.修改部门
- controller层编写接口,分为两部分,一步是根据id查询,然后是修改部门
serviceimpl中重写
编写Mapper,完成sal查询语句的编写
修改部门数据部分,逻辑与上文一致,从controller层开始,先编写接口,然后再调用service,serviceimpl重写方法,Mapper进行数据获取,对数据库进行操作。得到的数据再反向的传递上去,再从controller接口传到前端页面。
修改涉及先根据id查询到那个部门,然后再进行修改
修改成功
二.员工管理
1.分页查询
- 分页查询基本语法
select * from emp limit 0,5;
参数1:起始索引 = (页码-1)* 每页展示记录数
参数2:查询返回记录数 = 每页展示记录数
例如:查询第一页数据,每页展示5条数据
select * from emp limit 0,5;
例如:查询第二页数据,每页展示5条数据
select * from emp limit 5,5;
2.分页查询-思路
建立查询结果封装实体类
- 默认值的设置
- Slf4j注解报错
因为尝试生成一个名为 log 的字段时,发现已经存在同名字段,导致冲突。删除红框中代码即可
- 接口测试成功,输入参数,得出了正确的分页查询结果
- 分页插件PageHelper
首先修改pom文件中的依赖
然后修改Mapper
修改Service,使用pagehelper获取总记录数和结果列表,封装到PageBean,返回给controller。
输出结果,分页查询成功
2.条件分页查询
- 条件查询员工—姓名、性别、入职时间
select * from emp
where name like concat('%','张','%')
and gender = 1
and entrydate between '2000-01-01' and '2010-01-01'
order by update_time desc;
- <where>的作用
- 自动根据标签里的条件判断是否生成where子句
- 自动地去除第一个条件前面多余的and和or
- 动态sql,Mapper.xml文件
- 条件分页查询相较于条件查询变动的代码部分
- 报错
报错日志
通过灵码解析
找到问题,传参时出现了问题,应该去掉单引号
修改后成功跑出结果
3.删除员工
- 动态sql-foreach
- collection:要遍历的集合
- item:遍历出来的每一个元素"
- separator:分隔符
- open:遍历之前拼接什么close:遍历之后拼接什么
- 批量删除操作
中间遇到报错
找到问题,此处应为“ids“
删除成功
4.新增员工
- 编写controller层接口,service层,mapper层接口(此处编辑下面出现了报错,后文有修改后的代码)
- 出现报错
红框部分出现错误,这是修改过后的
- 新增成功
新输入的“林平之“,成功增加
5.修改员工
- 分为两步,第一步为查询回显,第二步为修改员工
- 查询回显-思路
- 根据id查询员工信息,成功
前后端联调,查询回显成功
- 更改员工信息-完成动态sql编写
前后端联调更新员工信息
修改前
修改后,更新成功
三.配置文件
1.参数配置化
- @Value注解通常用于外部配置的注入,具体用法为:@Value("${配置文件中的key}")
2.yml配置文件
- 常见配置文件格式对比
- yml基本语法
- 大小写敏感
- 数值前必须有空格,缩进时,不允许用Tab键,只能用空格(idea中自动将Tab转换为空格)
- 缩进的空格数目不重要,只要相同层级的左侧元素左侧对齐即可
- #表注释,从这个字符一直到行尾,都会被解析器忽略
- yml数据格式
- 根据properties写出yml
四.基础登录功能
1.登录功能
- 编写LoginController
- 依次编写service层和mapper层
- 输入一个库中没有的人员,显示”用户名或密码在错误”
输入存在的用户名和密码,返回正确
输出正确时控制台日志
- 前后端联调
输入错误的密码时,弹出提示
输入正确密码时,成功登录进入系统首页
2.登录校验
- http协议是无状态的
- 所谓无状态,是指每一次请求都是独立的,下一次请求并不会携带上一次请求的数据。
- 会话技术
- 会话:用户打开浏览器,凡哥维纳web服务器地资源,会话建立,知道有一番断开连接,会话结束。再一次会话中可以包含多次请求和响应。
- 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话地多次请求间共享数据。
- 会话跟踪技术:
- 客户端会话跟踪技术:Cookie
- 服务端会话跟踪技术:session
- 令牌技术
- 会话跟踪方案对比
- Cookie:编写SeesionController进行测试
- Cookie优点:HTTP协议中支持的技术
- Cookie缺点:
- 移动端App无法使用Cookie
- 不安全,用户可以自己禁用Cookie
- Cookie不能跨域
localhost:8080/c1回车进行测试
localhost:8080/c2回车进行测试
-
- Session优点:存储在服务端,安全
- Session缺点:服务器集群环境下无法直接使用Session
- Session:我们在s1中往session中存储了一个数据,然后在s2中取一下,看是不是同一个数据。
localhost:8080/s1回车进行测试
JSESSIONID对应的就是服务器端session会话对象的id
localhost:8080/s2回车进行测试
两个cookie都携带到了服务端。
控制台日志记录,可以看到两次请求拿到的会话对象session,都是同一个
-
- 令牌技术:
- 优点:支持PC端、移动端;解决集群环境下的认证问题;减轻服务器端存储压力
- 缺点:需要自己实现
- 令牌技术:
- JWT令牌(JSON Web Token);将原始的josn数据格式进行了安全的封装,使通信双方安全地传输信息。
- pom文件中引入jwt依赖
-
- 编写单元测试
-
- 测试后,控制台跑出令牌
-
- 编写解析测试
-
- 解析成功
- 编写工具类JwtUtils
-
- run的时候,放生了报错
原因是8080端口被别的进程占用了,通过查询资料,在cmd中通过命令行的方式找到该进程,并停止它。
修改后,成功跑出
并且返回了一个jwt令牌。
在jwt官网中encode,可以看到员工信息
- 过滤器Filter
- 创建Utils类DemoFilter
-
- 加上注解@ServletComponentScan
-
- 在前端页面点击,控制台日志会显出”拦截到了请求”
-
- 放行
-
- 放行成功
-
- 过滤器链:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。
- filter执行的顺序与类名的名称有关
- 过滤器链:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。
-
-
- 拦截路径:
- /*:拦截所有;
- /login:拦截一个具体的路径
- /depts/按照目录拦截:拦截/depts下面的所有。
- 拦截路径:
-
- 登录校验过滤器的逻辑实现
-
- 导入fastjson的依赖
-
- 跑出成功
- 拦截器(interceptor)
- 定义拦截器:实现HandlerInterceptor接口,并重回写其所有方法
- 注册拦截器
- 创建LoginCheckInterceptor类
-
- 用接口测试,查看日志记录
-
- 拦截路径
- /*:一级路径
- /**:任意级路径
- /depts/*:/depts下的一级路径
- /depts/**:depts下的任意级路径
- 完成登录校验拦截器的逻辑实现
- 发生报错,token的时间过期了
- 拦截路径
查找后发现是jwtutil类中,设置的时间有错误,不知怎么地多加了个负号。
3.异常处理
- 全局异常处理器
- @ExceptionHandler():指定需要捕获异常的类型
- 编写GlobalExceptionHandler,异常处理类
- 测试,在前端页面新增已存在的“就业部“,正确地提示异常出错
五.事务管理&AOP
1.事务管理
- 事务:一组操作的集合,他是不可分割的工作单位,这些操作要么同时成功,要么他同时失败
- 事务的操作:
- 开启事务(一组操作开始前,开启事务):start transaction / begin
- 提交事务(这组操作全部成功后,提交事务):commit
- 回滚事务(中间任何一个操作出现异常,回滚事务):rollback
- Soring事务管理
- 注解:@Transactional
- 位置:业务(service)层的方法类上、类上、接口上
- 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务;
- 删除部门下的部门成员
- 删除成功
yml文件修改
前端联调结果
- 事务属性-回滚
- 在默认情况下,只有出现RuntimeException才异常回滚。rollbackFor属性用于控制出现何种异常类型,回滚事务。
- @Transactional(rollbackFor = Exception.class):指定出现所有的异常都进行回滚。