本文主要从Controller层,Service层,Mapper层这三层架构中记录用到的各种注解
还有一些MyBatis用到的注解
持续更新到本人的毕设做完为止,太多了太多了根本学不完哈哈哈
1.Controller层
1.1@GetMapping/@PostMapping/@DeleteMapping/@PutMapping
用于建立HTTP请求与处理方法之间的映射关系,其中XXXMapping限定了提交http请求的方法
1.2@PathVariable
用于获取URL中提交过来的参数。例如,假设有一个请求URL为/users/{userId}/orders/{orderId},其中{userId}和{orderId}是动态参数。在控制器方法中,可以使用@PathVariable注解将这些参数的值提取出来
@RequestMapping("/users/{userId}/orders/{orderId}")
public String getOrder(@PathVariable("userId") Long userId, @PathVariable("orderId") Long orderId) {
// ... 处理逻辑
}
1.3@RequestBody
使用此注解,可以把前端发送的JSON格式的数据,绑定到一个Java的对象中。
@PostMapping("/users")
public String createUser(@RequestBody User user) {
// 使用user对象进行相应的业务逻辑处理
// ...
return "User created successfully";
}
public class User {
private String name;
private int age;
// 省略getter和setter方法
}
@DateTimeFormat
和RequestBody机制类似:前端传递了一个格式为"yyyy-MM-dd HH:mm:ss"的日期字符串,我们可以在对应的Java实体类属性上加上@DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”),这样Spring就会自动将这个字符串转换为Date类型,并赋值给该属性。
public Result page(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
String name, String gender,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,)
1.4@RequestMapping
作用是:抽取公共路径,让响应的方法都加上一段公共的父亲路径
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{userId}")
public String getUser(@PathVariable("userId") Long userId, Model model) {
// 根据userId获取用户信息,并添加到Model中
// ...
return "userDetails"; // 返回视图名称
}
@PostMapping("/create")
public String createUser(@RequestBody User user) {
// 处理创建用户的逻辑
// ...
return "redirect:/users"; // 重定向到用户列表页面
}
}
2.Service层
这一层主要实现接受Controller传来的DTO对象,转化为Entity类,调用Mapper层,实现数据可持久化。
1.@AutoWired
1.1作用
1.@Autowired注解起到了依赖注入(Dependency Injection)的作用。它可以对类成员变量、方法及构造函数进行标注,以完成自动装配的工作。
1.2注意点
1.不能在函数内部声明一个变量,然后去使用它,否则报错,只适合全局变量。
正确用法,在类中声明,而不是在函数中声明
3.Mapper层
也叫DAO层,主要实现和数据库的交互。有两种开发方法,一种是直接用注解写简单的SQL语句,另外一种是先写XML配置文件(写SQL),然后在只在Mapper类中定义方法
2.1@Select/@Delete/@Update/@
@Select("Select id, name, create_time, update_time from dept")
List<Dept> list();
3.MyBatis下的XML标签
3.1基本配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<mapper namespace ="com.itheima.mapper.EmpMapper">
</mapper>
其中 mapper的namespace属性来自于你要映射的那个Mapper层接口地址
4.其他
本质上是工具类和日志,不知道咋归类的东西
4.1@Sl4j
会给你自动生成一个对象log,给你提供当前类的日志信息
4.2AOP
面向切面编程,通俗地说就是把你的代码implement到一个动态代理对象上,然后强行给你要跑的代码的头部/尾部加上一些通用的代码段。这样就向一刀切向了许许多多的代码块,所以叫面向切面编程
@Target()
指定注解能被运用到什么地方
@Target是一个元注解,它用来描述其他注解可以被应用的地方。换句话说,它指定了自定义注解可以在哪些Java元素上使用。@Target注解的取值是一个ElementType枚举类型的数组,这些值包括:
TYPE:用于描述类、接口(包括注解类型)或enum声明
FIELD:用于描述字段,包括枚举的常量
METHOD:用于描述方法
PARAMETER:用于描述方法参数
CONSTRUCTOR:用于描述构造器
LOCAL_VARIABLE:用于描述局部变量
ANNOTATION_TYPE:用于描述注解类型
PACKAGE:用于描述包
@Rentention()
@Retention(RetentionPolicy.RUNTIME) 是 Java 提供的一个元注解,用于指定其他注解的生存周期。具体来说,它定义了注解在什么级别是有效的。Retention 是“保留”的意思,而 RetentionPolicy 是“保留策略”的枚举类型。
RetentionPolicy 有三个枚举值:
SOURCE:注解只在源码中存在,在编译时会被丢弃。这些注解不会写入字节码文件,因此 JVM 在运行时无法获取这些注解信息。这种策略通常用于编译时检查,如 @Override。
CLASS:注解在类文件中可用,但会被 JVM 丢弃。这意味着注解信息会保留在字节码文件中,以便在运行时通过反射获取,但是一旦类被加载到 JVM,注解信息就不会再被保留了。这是默认策略。
RUNTIME:注解在运行时也保留,因此可以通过 JVM 或其他使用反射机制的代码来读取注解的信息。这种策略通常用于需要在运行时动态读取注解信息的场景,如 Spring 框架中的很多注解。
上边两个组合起来,用来构成自定义的一个注解
@Aspect
用于标识这个类是一个切面类
@PointCut
@Pointcut(“execution(* com.sky.mapper..(…)) && @annotation(com.sky.annotation.AutoFill)”)
用于指明切入点,表示你要对哪些方法进行切入
@Before /@After /@Around
指明通知类型,主要就是告诉你切入的通知运行时机,是在切入点运行前/后还是前后都有