黑马javaweb开发-项目笔记

目录

一.部门管理

1.查询部门

2.删除部门

3.新增部门

4.修改部门

二.员工管理

1.分页查询

2.条件分页查询

3.删除员工

4.新增员工

5.修改员工

三.配置文件

1.参数配置化

2.yml配置文件

四.基础登录功能

1.登录功能

2.登录校验

3.异常处理

五.事务管理&AOP

1.事务管理


一.部门管理

1.查询部门

过程中出现了这么一个报错

通过查询发现是jdk版本设定了11而我的jdk版本是8,找了一会需要修改的地方,下面是一处

这是另一处

项目跟着视频的思路,第一个功能看了三四遍才跟上他的思路和速度,成功跑出了查询所有部门数据的功能。

2.删除部门
  1. 详细阅读接口文档进行编写,(删除部门接口)

  1. @PathVariable——接受路径参数

  1. 删除报错

方法参数与输入参数类型不匹配,将{id}改成5,即可正确完成删除操作

3.新增部门
  1. 报错

sql语法错误,仔细对照,发现了敲写错误的地方,此处”{”应为“(“,而”(”应为“{“

新增接口测试成功

  1. 前端页面打不开

解决:没有运行nginx.exe,点击运行即可

  1. 联调新增成功

  1. 将方法发的路径抽离出来,放在类上

4.修改部门
  1. controller层编写接口,分为两部分,一步是根据id查询,然后是修改部门

serviceimpl中重写

编写Mapper,完成sal查询语句的编写

修改部门数据部分,逻辑与上文一致,从controller层开始,先编写接口,然后再调用service,serviceimpl重写方法,Mapper进行数据获取,对数据库进行操作。得到的数据再反向的传递上去,再从controller接口传到前端页面。

修改涉及先根据id查询到那个部门,然后再进行修改

修改成功

二.员工管理

1.分页查询
  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.分页查询-思路

建立查询结果封装实体类

  1. 默认值的设置

  1. Slf4j注解报错

因为尝试生成一个名为 log 的字段时,发现已经存在同名字段,导致冲突。删除红框中代码即可

  1. 接口测试成功,输入参数,得出了正确的分页查询结果

  1. 分页插件PageHelper

首先修改pom文件中的依赖

然后修改Mapper

修改Service,使用pagehelper获取总记录数和结果列表,封装到PageBean,返回给controller。

输出结果,分页查询成功

2.条件分页查询
  1. 条件查询员工—姓名、性别、入职时间
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;
  1. <where>的作用
    • 自动根据标签里的条件判断是否生成where子句
    • 自动地去除第一个条件前面多余的and和or
  2. 动态sql,Mapper.xml文件

  1. 条件分页查询相较于条件查询变动的代码部分

  1. 报错

报错日志

通过灵码解析

找到问题,传参时出现了问题,应该去掉单引号

修改后成功跑出结果

3.删除员工
  1. 动态sql-foreach
    • collection:要遍历的集合
    • item:遍历出来的每一个元素"
    • separator:分隔符
    • open:遍历之前拼接什么close:遍历之后拼接什么

  1. 批量删除操作

中间遇到报错

找到问题,此处应为“ids“

删除成功

4.新增员工
  1. 编写controller层接口,service层,mapper层接口(此处编辑下面出现了报错,后文有修改后的代码)

  1. 出现报错

红框部分出现错误,这是修改过后的

  1. 新增成功

新输入的“林平之“,成功增加

5.修改员工
  1. 分为两步,第一步为查询回显,第二步为修改员工
  2. 查询回显-思路

  1. 根据id查询员工信息,成功

前后端联调,查询回显成功

  1. 更改员工信息-完成动态sql编写

前后端联调更新员工信息

修改前

修改后,更新成功

三.配置文件

1.参数配置化
  1. @Value注解通常用于外部配置的注入,具体用法为:@Value("${配置文件中的key}")

2.yml配置文件
  1. 常见配置文件格式对比

  1. yml基本语法
    • 大小写敏感
    • 数值前必须有空格,缩进时,不允许用Tab键,只能用空格(idea中自动将Tab转换为空格)
    • 缩进的空格数目不重要,只要相同层级的左侧元素左侧对齐即可
    • #表注释,从这个字符一直到行尾,都会被解析器忽略
  2. yml数据格式

  1. 根据properties写出yml

四.基础登录功能

1.登录功能
  1. 编写LoginController

  1. 依次编写service层和mapper层
  2. 输入一个库中没有的人员,显示”用户名或密码在错误”

输入存在的用户名和密码,返回正确

输出正确时控制台日志

  1. 前后端联调

输入错误的密码时,弹出提示

输入正确密码时,成功登录进入系统首页

2.登录校验
  1. http协议是无状态的
    • 所谓无状态,是指每一次请求都是独立的,下一次请求并不会携带上一次请求的数据。
  2. 会话技术
    • 会话:用户打开浏览器,凡哥维纳web服务器地资源,会话建立,知道有一番断开连接,会话结束。再一次会话中可以包含多次请求和响应。
    • 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话地多次请求间共享数据。
    • 会话跟踪技术:
      • 客户端会话跟踪技术:Cookie
      • 服务端会话跟踪技术:session
      • 令牌技术
  3. 会话跟踪方案对比
    • 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端、移动端;解决集群环境下的认证问题;减轻服务器端存储压力
      • 缺点:需要自己实现
  1. JWT令牌(JSON Web Token);将原始的josn数据格式进行了安全的封装,使通信双方安全地传输信息。
    • pom文件中引入jwt依赖

    • 编写单元测试

    • 测试后,控制台跑出令牌

    • 编写解析测试

    • 解析成功

  1. 编写工具类JwtUtils

    • run的时候,放生了报错

原因是8080端口被别的进程占用了,通过查询资料,在cmd中通过命令行的方式找到该进程,并停止它。

修改后,成功跑出

并且返回了一个jwt令牌。

在jwt官网中encode,可以看到员工信息

  1. 过滤器Filter
    • 创建Utils类DemoFilter

    • 加上注解@ServletComponentScan

    • 在前端页面点击,控制台日志会显出”拦截到了请求”

    • 放行

    • 放行成功

    • 过滤器链:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。
      • filter执行的顺序与类名的名称有关

      • 拦截路径:
        • /*:拦截所有;
        • /login:拦截一个具体的路径
        • /depts/按照目录拦截:拦截/depts下面的所有。
  1. 登录校验过滤器的逻辑实现

    • 导入fastjson的依赖

    • 跑出成功

  1. 拦截器(interceptor)
    • 定义拦截器:实现HandlerInterceptor接口,并重回写其所有方法
    • 注册拦截器
    • 创建LoginCheckInterceptor类

    • 用接口测试,查看日志记录

    • 拦截路径
      • /*:一级路径
      • /**:任意级路径
      • /depts/*:/depts下的一级路径
      • /depts/**:depts下的任意级路径
    • 完成登录校验拦截器的逻辑实现
    • 发生报错,token的时间过期了

查找后发现是jwtutil类中,设置的时间有错误,不知怎么地多加了个负号。

3.异常处理
  1. 全局异常处理器
    • @ExceptionHandler():指定需要捕获异常的类型
  2. 编写GlobalExceptionHandler,异常处理类

  1. 测试,在前端页面新增已存在的“就业部“,正确地提示异常出错

五.事务管理&AOP

1.事务管理
  1. 事务:一组操作的集合,他是不可分割的工作单位,这些操作要么同时成功,要么他同时失败
  2. 事务的操作:
    • 开启事务(一组操作开始前,开启事务):start transaction / begin
    • 提交事务(这组操作全部成功后,提交事务):commit
    • 回滚事务(中间任何一个操作出现异常,回滚事务):rollback
  3. Soring事务管理
    • 注解:@Transactional
    • 位置:业务(service)层的方法类上、类上、接口上
    • 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务;
  4. 删除部门下的部门成员
    • 删除成功

yml文件修改

前端联调结果

  1. 事务属性-回滚
    • 在默认情况下,只有出现RuntimeException才异常回滚。rollbackFor属性用于控制出现何种异常类型,回滚事务。
    • @Transactional(rollbackFor = Exception.class):指定出现所有的异常都进行回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值