Note25.2.26-3.5

by ADMIN 16 views

2025.2.26

学习新的API时,多去看返回值

学习新的API时,多去看返回值是非常重要的。这样可以帮助我们更好地理解API的使用方法和返回值的格式。下面是一些学习新的API时的注意事项:

  • 引入pagehelper依赖
  • 定义mapper接口的查询方法
  • 在service方法中实现分页查询
    • pageHelper-SQL语句后不能加分号
    • 仅能从分页后的第一个查询语句进行分页处理

条件分页查询

条件分页查询是指根据条件进行分页查询的过程。下面是一些条件分页查询的注意事项:

  • mapper定义映射配置文件
  • Directory --> com/whu_zzf/mapper --> .xml
namespace = "Mapper的绝对路径"
<select id="list" resultType="com.whu_zzf.pojo.Emp">
    select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id
    where
        e.name like concat('%',#{name},'%')
      and e.gender = #{gender}
      and e.entry_date between #{begin} and #{end}
    order by e.update_time desc
</select>
  • 出现问题:只显示部门信息
    • 解决:httpGet请求的URL写错了,目标是emps而不是depts
  • 出现问题:SQL中 #{} 不能出现在 “” 内。会识别成 ? 。
  • 优化:
    • controller 请求参数优化:将参数封装到一个实体类 EmpQueryParam 中

2025.2.27

动态SQL

动态SQL是指根据条件动态生成SQL语句的过程。下面是一些动态SQL的注意事项:

  • 当SQL语句要求不固定,随着用户的输入或外部条件的变化而变化(允许用户模糊查询)
  • :条件判断,成立则拼接对应sql片段
  • :自动生成where关键字,并会去除条件中多余的and和or
<where>
      <if test="name != null and name !=''" >
          e.name like concat('%',#{name},'%')
      </if>
      <if test="gender != null" >
          and e.gender = #{gender}
      </if>
      <if test="begin != null and end != null" >
          and e.entry_date between #{begin} and #{end}
      </if>
</where>
order by e.update_time desc

新增员工

新增员工是指根据用户输入的信息创建新的员工记录的过程。下面是一些新增员工的注意事项:

  • Controller:
    • 接受请求参数
    • 调用Service方法
    • 相应结果
  • Service:
    • 保存员工基本数据
    • 保存员工工作经历
  • Mapper:
    • SQL与数据库交互
  • @RequestBody:将HTTP请求中的数据直接映射到java对象中,实现数据的精准处理和转换。

注意:java实体类名与json数据名字一致

注意:java实体类采用驼峰命名法(entryDate),数据库采用_分命名(entry_date)

员工经历

员工经历是指员工的工作经历信息。下面是一些员工经历的注意事项:

  • 从MYSQL获取主键:@Options
  • 遍历集合/数组:
  • 报错:
    • java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>' at line 6
    • empExprMapper.insertBatch(exprList); 放在了循环里面
    • 多了一个">"

2025.2.28

事务transaction

事务transaction是指一组操作的集合,这组数据要么全部操作成功,要么全部失败。下面是一些事务transaction的注意事项:

  • 一组操作的集合,这组数据要么全部操作成功,要么全部失败。
  • 开启:start 提交:commit 回滚:rollback
  • 场景:一次业务要进行操作多次数据库中数据
    • 银行转账
    • 下单扣减库存

注解@Transactional

注解@Transactional是指加在实现方法上(多次操作数据库)的注解。下面是一些注解@Transactional的注意事项:

  • 加在实现方法上(多次操作数据库)
  • rollbackFor:允许回滚其他异常(默认回滚运行时异常)

事务特性:(ACID)

事务特性:(ACID)是指事务的原子性、一致性、隔离性和持久性。下面是一些事务特性的注意事项:

  • 原子性:不可分割的最小单元
  • 一致性: 完成后所有数据保持一致
  • 隔离性:不受外部并发操作影响
  • 持久性:事务的提交与回滚对数据库的改变是永久的

文件上传

文件上传是指将文件上传到服务器的过程。下面是一些文件上传的注意事项:

  • RequestParam:前端参数与类参数不一致时绑定
  • resources - static 存放HTML等静态资源
  • 前端页面三要素:method = "post" enctype = "multipart/form-data" type = file
  • 服务端接收文件:MultipartFile file

注解:

注解是指在代码中添加的特殊标记。下面是一些注解的注意事项:

  • @Slf4j :生成log日志
  • @RestController:Spring 框架中的一个注解,用于简化创建 RESTful Web 服务的过程

2025.3.3

展示Integer数组 :Arrays.toString( nums );

展示Integer数组是指将Integer数组转换为字符串的过程。下面是一些展示Integer数组的注意事项:

  • Arrays.toString( nums );

删除员工信息:Controller中通过集合接收ID ,Mapper使用foreach动态构建SQL语句来控制数据库

删除员工信息是指根据用户输入的ID删除员工信息的过程。下面是一些删除员工信息的注意事项:

  • Controller中通过集合接收ID
  • Mapper使用foreach动态构建SQL语句来控制数据库
<delete id="deleteByids">
      delete from emp where id in
      <foreach collection="ids" item="id" separator="," open="(" close=")" >
      #{id}
      </foreach>
</delete>

员工信息回显:

员工信息回显是指根据员工ID查询员工信息的过程。下面是一些员工信息回显的注意事项:

  • 内连接:查询两张表数据的交集
  • 外连接:显示前表中的所有内容(?)
  • Controller:接收参数ID
  • @PathVariable:路径参数绑定方法形参
  • 通过ID查询信息,将信息员工信息返回到员工实体类
  • 出现问题:
    • 查询失败: Controller返回Result.success()内填emp 非id
    • 不显示工作经历:配置.xml文件中使用resultMap非resultType
      • resultMap:人工对SQL返回数据绑定 结构复杂,名字对不上
      • resultType:自动绑定 返回字段名与实体属性名对应上

修改员工信息

修改员工信息是指根据员工ID修改员工信息的过程。下面是一些修改员工信息的注意事项:

  • 根据id修改员工基本信息
  • 根据id删除员工工作经历
  • 重新插入员工工作经历
//1.根据id修改员工基本信息
emp.setUpdateTime(LocalDateTime.now());
empMapper.updateByid(emp);
//2.根据id删除员工工作经历
empExprMapper.deleteByempids(Arrays.asList(emp.getId()));
//3.重新插入员工工作经历
List<EmpExpr> exprList = emp.getExprList();
if(!CollectionUtils.isEmpty(exprList)) {
    //遍历集合,为empexpr实体类的empid赋值
    exprList.forEach(empExpr -> {
        empExpr.setEmpId(emp.getId());
    });
    empExprMapper.insertBatch(exprList);
}

2025.3.4

异常处理

异常处理是指捕获和处理异常的过程。下面是一些异常处理的注意事项:

  • @RestControllerAdvice:可以捕获整个应用程序中的异常,并返回统一格式的 JSON 响应。
  • @ExceptionHandler:标记一个方法来处理特定类型的异常。控制器抛出指定异常时,Spring 会调用带有该注解的方法来处理异常。

员工信息统计

员工信息统计是指统计

Q&A

Q1: 学习新的API时,多去看返回值的原因是什么?

A1: 学习新的API时,多去看返回值可以帮助我们更好地理解API的使用方法和返回值的格式。

Q2: 条件分页查询的注意事项是什么?

A2: 条件分页查询的注意事项包括mapper定义映射配置文件、Directory --> com/whu_zzf/mapper --> .xml、SQL语句后不能加分号、仅能从分页后的第一个查询语句进行分页处理等。

Q3: 动态SQL的注意事项是什么?

A3: 动态SQL的注意事项包括当SQL语句要求不固定,随着用户的输入或外部条件的变化而变化(允许用户模糊查询)、 条件判断、 自动生成where关键字等。

Q4: 新增员工的注意事项是什么?

A4: 新增员工的注意事项包括Controller接受请求参数、Service保存员工基本数据和工作经历、MapperSQL与数据库交互等。

Q5: 文件上传的注意事项是什么?

A5: 文件上传的注意事项包括RequestParam前端参数与类参数不一致时绑定、resources - static 存放HTML等静态资源、前端页面三要素method = "post" enctype = "multipart/form-data" type = file等。

Q6: 注解的注意事项是什么?

A6: 注解的注意事项包括@Slf4j 生成log日志、@RestController简化创建 RESTful Web 服务的过程等。

Q7: 展示Integer数组的注意事项是什么?

A7: 展示Integer数组的注意事项包括Arrays.toString( nums );

Q8: 删除员工信息的注意事项是什么?

A8: 删除员工信息的注意事项包括Controller中通过集合接收ID、Mapper使用foreach动态构建SQL语句来控制数据库等。

Q9: 员工信息回显的注意事项是什么?

A9: 员工信息回显的注意事项包括内连接、外连接、Controller接收参数ID、@PathVariable路径参数绑定方法形参等。

Q10: 修改员工信息的注意事项是什么?

A10: 修改员工信息的注意事项包括根据id修改员工基本信息、根据id删除员工工作经历、重新插入员工工作经历等。

Q11: 异常处理的注意事项是什么?

A11: 异常处理的注意事项包括@RestControllerAdvice捕获整个应用程序中的异常、@ExceptionHandler标记一个方法来处理特定类型的异常等。

Q12: 员工信息统计的注意事项是什么?

A12: 员工信息统计的注意事项包括统计员工信息的数量、员工信息的平均值等。

Q13: 部门人数统计的注意事项是什么?

A13: 部门人数统计的注意事项包括统计部门人数的数量、部门人数的平均值等。

Q14: 性别人数统计的注意事项是什么?

A14: 性别人数统计的注意事项包括统计性别人数的数量、性别人数的平均值等。

Q15: 登录校验的注意事项是什么?

A15: 登录校验的注意事项包括校验用户的登录信息、校验用户的权限等。

Q16: 会话技术的注意事项是什么?

A16: 会话技术的注意事项包括客户端会话跟踪技术、服务端会话跟踪技术、令牌技术等。

Q17: JWT令牌的注意事项是什么?

A17: JWT令牌的注意事项包括令牌的组成、令牌的生成、令牌的校验等。

Q18: 过滤器的注意事项是什么?

A18: 过滤器的注意事项包括过滤器的定义、过滤器的配置、过滤器的放行等。

Q19: 拦截器的注意事项是什么?

A19: 拦截器的注意事项包括拦截器的定义、拦截器的配置、拦截器的放行等。

Q20: 拦截器与过滤器的异同是什么?

A20: 拦截器与过滤器的异同包括拦截器只拦截Spring环境中的资源、过滤器拦截所有资源等。