一、注解:
1.@Compoent
将当前类交给IOC容器管理,成为IOC容器对象中的Bean对象
2.@Aspect
当前类不在是普通类,而是一个AOP类,切面类
3.@Retention(RetentionPolicy.RUNTIME)
用来指定该注解什么时候生效; (RetentionPolicy.RUNTIME) :运行的时候生效
4.@Target(ElementType.METHOD)
指定当前直接作用在类上还是方法上;(ElementType.METHOD) :在方法上生效
5.@Slf4j
操作日志(log)
6.@Around()
环绕通知方法的返回值为:Object;()里面为切入点表达式,可以基于注解的方式来匹配切入点方法: (“@annotation(“(自定义注解的全类名)com.dragon.anno.Log”)”) : 匹配的是方法上加有@Log注解的方法
7.@Transactional
可以写在接口类,接口方法,实现类和实现类方法上,写在谁的上面谁的(接口实现类的)方法就会有事务,建议写在实现类和实现的方法上。
里面有rollbackFor属性@Tranctional(rollbackFor = {IOException.class}),添加默认没有的异常类型
8.@RequstMapping
-
类型:方法注解
-
位置:SpringMVC控制器方法定义上方
-
作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
-
属性:
-
value (默认) :请求访问路径,或访问路径前缀
-
method:http请求动作,标准动作(GET/POST/PUT/DELETE)
//请求路径映射 @RequestMapping("/save") @ResponseBody public String save(){ System.out.println("user save ..."); return "{'module':'user save'}"; }
-
9.@RequestParam
-
类型:形参注解
-
位置:SpringMVC控制器方法形参定义前面
-
作用:绑定请求参数与处理器方法形参间的关系
-
参数
-
required: 是否为必传参数
-
defaultValue: 参数默认值
-
普通参数:请求参数名与形参变量名不同,使用@RequestParam绑定参数关系
//普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name") String userName , int age){
System.out.println("普通参数传递 userName ==> "+userName);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param different name'}";
}
10.@RequestBody
-
类型:形参注解
-
位置:SpringMvc控制器方法形参定义前面
-
作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
-
使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象\实体类\形参的保存实体类对象的集合对象中作为数据
//2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应 @RequestMapping("/listPojoParamForJson") @ResponseBody public String listPojoParamForJson(@RequestBody List<User> list){ System.out.println("list pojo(json)参数传递 list ==> "+list); return "{'module':'list pojo for json param'}"; }
-
类型:方法注解
-
位置:SpringMvc控制器方法定义上方
-
作用:设置当前控制器返回值作为响应体
//响应POJO对象 //返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解 @RequestMapping("/toJsonPOJO") @ResponseBody public User toJsonPOJO(){ System.out.println("返回json对象数据"); User user = new User(); user.setName("itcast"); user.setAge(15); return user; }
11.@EnableWebMvc
-
类型:配置类注解
-
作用:开启SpringMvc多项辅助功能
-
位置:SpringMvc配置类定义上方
@Configuration @ComponentScan("com.dragon.controller") //开启json数据类型自动转换 @EnableWebMvc public class SpringMvcConfig { }
12.@DateTimeFormat
-
类型:形参注解
-
位置::SpringMVC控制器方法形参前面
-
作用:设定日期时间型数据格式
-
属性:pattern:日期时间格式字符串
日期类型数据基于系统不同格式也不尽相同
-
2023-09-28
-
2023/09/28
-
09/28/2023
//日期参数 //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd @RequestMapping("/dataParam") @ResponseBody public String dataParam(Date date, @DateTimeFormat(pattern="yyyy-MM-dd") Date date1, @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){ System.out.println("参数传递 date ==> "+date); System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1); System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2); return "{'module':'data param'}"; }
13.@PathVariable
-
类型:形参注解
-
位置:SpringMVC控制器方法形参定义前面
-
作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
//设置当前请求方法为DELETE,表示REST风格中的删除操作 //@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同 @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE) @ResponseBody public String delete(@PathVariable Integer id){ System.out.println("user delete..." + id); return "{'module':'user delete'}"; }
14.@RestController
-
类型:类注解
-
位置:基于SpringMVC的RESTful开发控制器类定义上方
-
作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能
15.@GetMapping @PostMapping @PutMapping @DeleteMapping
-
类型:方法注解
-
位置:基于SpringMVC的RESTful开发控制器方法定义上方
-
作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求
-
相关属性:value(默认):请求访问路径
16.@RestControllerAdvice
名称 | @RestControllerAdvice |
---|---|
类型 | 类注解 |
位置 | Rest风格开发的控制器增强类定义上方 |
作用 | 为Rest风格开发的控制器类做增强 |
-
此注解自带@ResponseBody注解与@Component注解,具备对应的功能
//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器 @RestControllerAdvice public class ProjectExceptionAdvice { //除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常 @ExceptionHandler(Exception.class) public Result doException(Exception ex){ System.out.println("嘿嘿,异常你哪里跑!") return new Result(666,null,"嘿嘿,异常你哪里跑!"); } }
17.@ExceptionHandler
名称 | @ExceptionHandler |
---|---|
类型 | 方法注解 |
位置 | 专用于异常处理的控制器方法上方 |
作用 | 设置指定异常的处理方案,功能等同于控制器方法,出现异常后终止原始控制器执行,并转入当前方法执行 |
-
此类方法可以根据处理的异常不同,制作多个方法分别处理对应的异常
//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器 @RestControllerAdvice public class ProjectExceptionAdvice { //除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常 @ExceptionHandler(Exception.class) public Result doException(Exception ex){ System.out.println("嘿嘿,异常你哪里跑!") return new Result(666,null,"嘿嘿,异常你哪里跑!"); } }
18.@TableField
名称 | @TableField |
---|---|
类型 | 属性注解 |
位置 | 模型类属性定义上方 |
作用 | 设置当前属性对应的数据表中的字段关系 |
-
相关属性
-
value (默认):设置数据库表字段名称
-
exist:设置属性在数据库字段中是否存在,默认为true。此属性无法与value合并使用
-
select:设置属性是否参与查询,此属性与select()映射配置不冲突
-
@Data @TableName("db01.tbl_book") public class Book { @TableField(value = "pwd",select = false) private String password; @TableField(exist = false) private Integer online;
19.@TableName
名称 | @TableName |
---|---|
类型 | 类注解 |
位置 | 模型类定义上方 |
作用 | 设置当前类对应于数据库表的关系 |
-
相关属性
-
value:设置数据库表名
-
@Data @TableName("db01.tbl_book") public class Book { @TableField(value = "pwd",select = false) private String password; @TableField(exist = false) private Integer online;
20.@TableId
名称 | @TableId |
---|---|
类型 | 属性注解 |
位置 | 模型类中用于表示主键的属性的定义上方 |
作用 | 设置当前类中主键属性的生成策略 |
-
相关属性
-
value:设置数据库主键名称
-
type:设置主键属性的生成策略,值参照IdType枚举值
-
/** * 设置主键生成策略 */ @TableId(type = IdType.INPUT) private Long id;
21.@TableLogic
名称 | @TableLogic |
---|---|
类型 | 属性注解 |
位置 | 模型类中用于表示删除字段的属性定义上方 |
作用 | 标识该字段为进行逻辑删除的字段 |
相关属性 | value:逻辑未删除值 delval:逻辑删除值 |
-
第一种:直接注释
/** * 逻辑删除字段,标记当前记录是否被删除 */ @TableLogic(value = "0",delval = "1") private Integer deleted;
-
第二种:配置文件
-
如果每个表都要有逻辑删除,那么就需要在每个模型类的属性上添加
@TableLogic
注解,如何优化?在配置文件中添加全局配置,如下:
mybatis-plus: global-config: db-config: # 逻辑删除字段名 logic-delete-field: deleted # 逻辑删除字面值:未删除为0 logic-not-delete-value: 0 # 逻辑删除字面值:删除为1 logic-delete-value: 1
介绍完逻辑删除,逻辑删除的本质为:
逻辑删除的本质其实是修改操作。如果加了逻辑删除字段,查询数据时也会自动带上逻辑删除字段。
执行的SQL语句为:
UPDATE tbl_user SET deleted=1 where id = ? AND deleted=0
-
22.@Version
名称 | @Version |
---|---|
类型 | 属性注解 |
位置 | 模型类中用于表示乐观锁的属性定义上方 |
作用 | 标识该字段为进行实现乐观锁的字段 |
/** * 实现乐观锁 */ @Version private Integer version;
23.@AllArgsConstructor & @NoArgsConstructor
生成有参和无参的构造方法
24.@Builder
构建器
1)在Dish类加上@Builder注解,并用@Data提供相关的方法
@Data @Builder @NoArgsConstructor @AllArgsConstructor public class Dish implements Serializable { private static final long serialVersionUID = 1L; private Long id; //菜品名称 private String name; //菜品分类id private Long categoryId;
2)直接创建Dish对象,调用builder()+属性+调用build()方法即可创建具有指定属性的Dish对象。
Dish dish = Dish.builder() .categoryId(categoryId) .status(StatusConstant.ENABLE) .build();