黑马程序员_JavaWeb开发笔记、常用注解以及day09实战部分代码

视频地址:

全网首发AI+JavaWeb开发入门,Tlias教学管理系统项目实战全套视频教程,从需求分析、设计、前后端开发、测试、程序优化到项目部署一套搞定_哔哩哔哩_bilibili

笔记:

官方的:‌‍‌‌‬‬‬‍‬‬‌‍‌‌‬‍⁠概述 - 飞书云文档,除了笔记以外接口文档之类的也在这里面

个人的:JavaWeb笔记 - 飞书云文档

实战代码遇到的问题与解决

一定要跟着接口文档写,一定!

clazz 部分

1.在添加弹窗那个班主任下拉框没有显示班主任选项

这个是因为在员工控制层没有写员工查询所有员工的方法,在这个下拉框是调用查询所有员工的方法,在视频里面没有写,但是接口2.6有,记得写

2.关于clazz的status这一栏的要求如何实现

  • 当前时间 < 开课时间:未开课
  • 当前时间 > 结课时间:已结课
  • 否则:在读

大家发现要实现要求,但是呢,给我们的数据库表里面没有status这一栏。笔者一开始想的是我自己加一栏,然后add添加班级的时候就做个ifelse判断,然后把状态存进去,但是这样还是不对,因为状态是动态变化的,举个例子就是如果add的是明天的课,那么到明天的时候数据库里面还是放的未开课emm,所以得根据时间动态获得状态,而为啥实体类里面有status这个字段数据库里面没有呢?就是因为没必要往数据库里面存储,每次都是根据今天的日期实时计算的状态

这里提供一种写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<select id="findPage" resultType="com.itheima.pojo.Clazz">
select c.id,c.name,c.begin_date,c.end_date,e.name master_name,subject,c.update_time,c.room,
case
when curdate() &gt; c.end_date then '已结课'
when curdate() &lt; c.begin_date then '未开班'
else '在读中'
end as status
from clazz c left join emp e on c.master_id = e.id
<where>
<if test="name != null and name != ''">
and c.name like concat('%', #{name}, '%')
</if>
<if test="beginDate != null">
and c.begin_date &gt;= #{beginDate}
</if>
<if test="endDate != null">
and #{endDate} &gt;= c.end_date
</if>
</where>
</select>
<select id="findAll" resultType="com.itheima.pojo.Clazz">
select c.id,c.name,c.begin_date,c.end_date,e.name master_name,subject,c.update_time,c.room,
case
when curdate() &gt; c.end_date then '已结课'
when curdate() &lt; c.begin_date then '未开班'
else '在读中'
end as status
from clazz c left join emp e on c.master_id = e.id
</select>

3.编写update时后端测试通过,数据库里面的数据也改了,但是前端点击编辑调用的却是add方法。。

这是因为没有实现前面通过id查找班级的接口,把这个实现之后点击编辑也有回显了,也可以正常修改了。。

课程全部代码地址

Darling-123456/AI_javaweb_tlias: AI_javaweb_tlias练手项目完整代码

用到的注解查看

自定义注解

  1. @Log - 自定义日志注解,标记在方法上,用于统一记录操作日志(配合 AOP 使用)

注解定义元注解

  1. @Target(ElementType.METHOD) - 指定这个注解只能写在方法上(不能写在类、字段上)。
  2. @Retention(RetentionPolicy.RUNTIME) - 让这个注解在程序运行时也保留,这样才能通过反射读取到它。

Lombok 注解

  1. @Data - 自动生成 getter/setter、toString、equals、hashCode 方法,省去手动编写。
  2. @NoArgsConstructor - 生成一个无参构造方法
  3. @AllArgsConstructor - 生成一个包含所有字段的全参构造方法
  4. @Slf4j - 在类里自动注入一个名为 log 的日志对象,可以直接写 log.info("xxx")

Spring Boot 核心注解

  1. @SpringBootApplication - 标注在启动类上,是 Spring Boot 项目的入口,包含自动配置和组件扫描功能
  2. @ServletComponentScan - 开启对 Servlet、Filter、Listener 等原生 Web 组件的扫描支持
  3. @Configuration - 标注在配置类上,表示这个类里定义了 Spring 的 Bean 配置
  4. @Component - 标注在普通类上,把这个类交给 Spring 容器管理,是最基础的组件注解。
  5. @Service - 标注在业务逻辑层(Service 层)的类上,交给 Spring 管理,并明确表示这是业务层。
  6. @Mapper - 标注在 MyBatis 的 Mapper 接口上,告诉 Spring 这是一个数据库操作的接口,需要生成代理对象。
  7. @RestController - 标注在控制器类上,表示这是前后端分离的控制器,所有方法默认返回 JSON 数据。
  8. @RestControllerAdvice - 标注在全局异常处理类上,可以统一捕获 Controller 层抛出的异常并统一返回格式。
  9. @ConfigurationProperties - 标注在配置类或字段上,用于将配置文件(application.yml)里的属性值绑定到 Java 对象上。

依赖注入注解

  1. @Autowired - 自动注入 Spring 容器中的 Bean,通常写在字段上,由 Spring 自动赋值。

请求映射注解(Spring MVC)

  1. @RequestMapping - 通用请求路径映射,可以标注在类或方法上,支持所有请求方式(GET/POST 等)。
  2. @GetMapping - 专门映射 GET 请求,等价于 @RequestMapping(method = RequestMethod.GET)
  3. @PostMapping - 专门映射 POST 请求,用于新增数据。
  4. @PutMapping - 专门映射 PUT 请求,用于修改数据。
  5. @DeleteMapping - 专门映射 DELETE 请求,用于删除数据。

参数绑定注解

  1. @RequestBody - 接收请求体里的 JSON 数据(比如前端传来的对象),用于 POST/PUT 请求。
  2. @RequestParam - 取 URL 地址栏 ? 号后面的参数(例如 /depts?id=1)。
  3. @PathVariable - 取 URL 路径里 {} 包裹的部分(例如 /depts/1 中的 1)。
  4. @DateTimeFormat - 指定字符串转日期时的格式,例如 @DateTimeFormat(pattern = "yyyy-MM-dd")

AOP 相关注解

  1. @Aspect - 标注在切面类上,表示这是一个用于拦截方法的切面(AOP)类。
  2. @Around - 标注在切面方法上,表示这是一个环绕通知,可以在目标方法执行前/后/异常时执行自定义逻辑。
  3. @ExceptionHandler - 标注在方法上,用于处理指定类型的异常,通常和 @RestControllerAdvice 配合使用。

事务管理注解

  1. @Transactional - 标注在方法或类上,表示该方法(或类中所有方法)要在事务中执行,异常时自动回滚。
  2. @Transactional(propagation = Propagation.REQUIRES_NEW) - 标注事务传播行为,表示无论当前是否有事务,都会新建一个独立事务运行。

MyBatis 注解

  1. @Select - 标注在 Mapper 接口的方法上,直接写 SQL 的查询语句,无需 XML 文件。
  2. @Insert - 标注在 Mapper 接口的方法上,直接写 SQL 的插入语句。
  3. @Update - 标注在 Mapper 接口的方法上,直接写 SQL 的更新语句。
  4. @Delete - 标注在 Mapper 接口的方法上,直接写 SQL 的删除语句。
  5. @Options - 配置 MyBatis 操作的额外选项,比如开启主键回填(useGeneratedKeys = true)。
  6. @MapKey - 标注在查询方法上,将返回的 List 结果封装成 Map,指定某个字段作为 Key。

Servlet 注解

  1. @WebFilter - 标注在过滤器类上,声明这是一个 Servlet 过滤器,并配置拦截路径(如 urlPatterns = "/*")。

这样每个注解的作用都一目了然,方便你随时翻阅和记忆。😊