SpringBoot(三层框架Controller,Mapper,Service)中遇到的一些注解整理

本文主要从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 mapperPUBLIC "-//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

指明通知类型,主要就是告诉你切入的通知运行时机,是在切入点运行前/后还是前后都有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML动态房屋装饰特效

下面是代码&#xff1a; <!DOCTYPE html> <html lang"en" ><head><meta charset"UTF-8"><title>HTML5房屋装饰工具DEMO演示</title><link rel"stylesheet" href"css/style.css"></he…

Adobe XD 55.2.12.2软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; Adobe XD 55.2.12.2是一款专业级的图形界面UI/UX设计工具&#xff0c;拥有丰富的功能和强大的性能。它集成了原型设计、界面设计和交互设计等多种功能…

02-编程猜谜游戏

本章通过演示如何在实际程序中使用 Rust&#xff0c;你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题&#xff1a;猜谜游戏。 工作原理如下&#xff1a;程序将随机生成一个介于 1 和 100 之间的整数。然后&#xff0c;程序…

MyBatisPlus学习笔记五-插件功能

0、插件功能 MyBatisPlus提供的内置拦截器有下面这些 1、分页插件 2、通用分页实体 3、通用分页实体-强化 需求&#xff1a; 在PageQuery中定义方法&#xff0c;将PageQuery对象转为MyBatisPlus中的Page对象在PageDTO中定义方法&#xff0c;将MyBatisPlus中的Page结果转为Page…

Qt文件和目录相关操作

1.相关说明 QCoreApplication类、QFile类、QDir、QTemporaryDir类、QTemporaryFile类、QFileSystemWatcher类的相关函数 2.相关界面 3.相关代码 #include "dialog.h" #include "ui_dialog.h" #include <QFileDialog> #include <QTemporaryDir>…

TypeScript语法总结

JavaScript 与 TypeScript 的区别 TypeScript 是 JavaScript 的超集&#xff0c;扩展了 JavaScript 的语法&#xff0c;因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改&#xff0c;TypeScript 通过类型注解提供编译时的静态类型检查。 TypeScript 可处理已…

什么是DOM?(JavaScript DOM是什么?)

1、DOM简洁 DOM是js中最重要的一部分&#xff0c;没有DOM就不会通过js实现和用户之间的交互。 window是最大的浏览器对象&#xff0c;在它的下面还有很多子对象&#xff0c;我们要学习的DOM就是window对象下面的document对象 DOM&#xff08;Document Object Model&#xff09…

Unity导出Android项目踩坑记录

1、buildSetting-> 设置ExportProject 2、buildsetting ->playerSetting ->设置IL2CPP 3、设置ndk edit->preferences->external tools->ndk 如果unity的ndk版本和android项目里的ndk版本不一致会报错&#xff0c;让人很崩溃的 4、支持64位配置 buildsetti…

【Java】JDBC的使用

JDBC package jdbc_demo;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class jdbc {public static void main(String[] args)throws Exception {//1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.获取…

c JPEG 1D DCT 优化二(AAN)

这两个图可能就是AAN 的数学模型 优化DCT就是用代码实现矩阵9,10 9和10已经把64个系数缩小到一半32个了。光从这两图可看出&#xff0c;优化后乘法少了64-32436个&#xff0c;加法少了64-32-824。估计优化时间可少百分之40左右。 实际编码640480 的图片&#xff0c;程序执行时…

FlinkSQL【分组聚合-多维分析-性能调优】应用实例分析

FlinkSQL处理如下实时数据需求&#xff1a; 实时聚合不同 类型/账号/发布时间 的各个指标数据&#xff0c;比如&#xff1a;初始化/初始化后删除/初始化后取消/推送/成功/失败 的指标数据。要求实时产出指标数据&#xff0c;数据源是mysql cdc binlog数据。 代码实例 --SET t…

解决系统开发中的跨域问题:CORS、JSONP、Nginx

文章目录 一、概述1.问题场景2.浏览器的同源策略3.解决思路 二、一点准备工作1.创建前端工程12.创建后端工程3.创建前端工程24.跨域问题 三、方法1&#xff1a;使用CORS四、方法2&#xff1a;JSONP五、方法3&#xff1a;Nginx1.安装和启动&#xff08;windows&#xff09;2.使用…