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 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

削峰填谷与应用间解耦:分布式消息中间件在分布式环境下并发流量控制的应用

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;18&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;4&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 本篇重点讲清楚分布式消息中间件的特点&#xff0c;常见消息中间件…

03 MyBatisPlus之条件构造器Wrapper+三个核心注解

2. 条件构造器 2.1 条件构造器作用 //创建一个查询条件构造器对象,所有条件都放进去 QueryWrapper<User> queryWrapper new QueryWrapper<>(); queryWrapper.eq("name", "John"); // eq添加等于条件 queryWrapper.ne("age", 30);…

R.swift SwiftGen 资源使用指南

R.swift 和 SwiftGen 资源转换使用指南 R.swift &#xff08;原始代码会打包到项目&#xff1f;&#xff09; Pod platform :ios, 12.0 target LBtest do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!pod R.swift # pod SwiftGen, ~&g…

使用zabbix-proxy进行分布式监控

目录 一、准备4台服务器 二、配置主从复制 1.准备环境 2.主机名解析 3.安装数据库 4.配置主库db1 5.配置从库db2 6.主从状态显示 三、db1&#xff0c;db2配置zabbix-agent 三、zabbix-server的配置 四、zabbix-proxy的配置 1.为您的平台安装和配置Zabbix-proxy a. …

国标GB28181安防视频监控平台EasyCVR视频分享页增加精简模式

智慧安防平台EasyCVR能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的快捷传输&#xff0c;可以兼容各品牌的IPC、NVR、移动…

Summary for Packaging and Assembly Technologies for Integrated Systems

目录 Introduction Type of Packages: Packaging of integrated devices Question 1: Question 2: Question 3: Question 4: Question 5: Report 1: Front-end and back-end process Question 6: Question 7: Inspection Process Report 2: Prototyping and mas…

RNN:Long Short-term Memory(中)

目录 1 LSTM 的简图 2 LSTM 的整体结构 2.1 结构图 2.2 流程图 3 举个例子 3.1 简单看看 3.2 代入 LSTM 4 Original Network v.s. LSTM 5 细看 LSTM 原视频&#xff1a;李宏毅 2020&#xff1a;Recurrent Neural Network (Part I) 1 LSTM 的简图 LSTM 实际…

[二]rtmp服务器搭建

[二]rtmp服务器搭建 一.测试二.使用Nginx搭建自己的rtmp服务器1.nginx是什么&#xff1f;2.环境准备 三、搭建过程1.安装编译 nginx 所需要的库2.下载 nginx-1.21.6.tar.gz3.下载 nginx-rtmp-module 4.解压5.编译6.启动nginx&#xff0c;检测nginx是否能成功运行7.配置nginx使用…

【ARMv8M Cortex-M33 系列 7.2 -- HardFault 问题定位 1】

文章目录 问题背景堆栈对齐要求Cortex-M33 的 FPU 功能 问题背景 rt-thread 在PendSV_Handler退出的时候发生了HardFault_Handler是什么原因&#xff1f;且 LR 的值为0xfffffffd 堆栈对齐要求 在 ARM Cortex-M 架构中&#xff0c;堆栈指针 (SP) 必须始终保持 8 字节对齐。这…

【ChatGPT】利用ChatGPT将图片转换成JSON文件

前言 我在创建自己的GPT时,通常会上传一些JSON文件作为知识库,我还制作了一些脚本工具,将PDF文件转换成JSON文件。但是在这个过程中产生一个问题,PDF文件中会有一些图表,JSON文件就不能存储和表达这些图表的内容了。那该怎么办呢?这里跟大家介绍一个方法,可以有效地将图…

大数据开发之Hadoop(完整版+练习)

第 1 章&#xff1a;Hadoop概述 1.1 Hadoop是什么 1、Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 2、主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。 3、Hadoop通常是指一个更广泛的概念-Hadoop生态圈 1.2 Hadoop优势&#xff08;4高&#xf…

vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持

文章目录 一、v-model是什么二、什么是语法糖三、v-model常见的用法1、对于输入框&#xff08;input&#xff09;&#xff1a;2、对于复选框&#xff08;checkbox&#xff09;&#xff1a;3、对于选择框&#xff08;select&#xff09;&#xff1a;4、对于组件&#xff08;comp…

关于C#中的LINQ的延迟执行

简介 Linq中的绝大多数查询运算符都有延迟执行的特性,查询并不是在查询创建的时候执行,而是在遍历的时候执行 实例&#xff1a; public void Test2(){List<int> items new List<int>() { -1, 1, 3, 5 };IEnumerable<int> items2 items.Where(x > x &g…

ChatGPT 如何解决 “Something went wrong. lf this issue persists ….” 错误

Something went wrong. If this issue persists please contact us through our help center at help.openai.com. ChatGPT经常用着用着就出现 “Something went wrong” 错误&#xff0c;不管是普通账号还是Plus账号&#xff0c;不管是切换到哪个节点&#xff0c;没聊两次就报…

《数字图像处理-OpenCV/Python》连载:傅里叶变换与频域滤波

《数字图像处理-OpenCV/Python》连载&#xff1a;空间滤波之高斯滤波器 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第 11 章 傅里叶变换与频域滤波 空间图像滤波是图像与滤波器核…

mysql B+树索引

数据库索引用于提高查询性能和数据访问效率。索引可以加速数据的查找和筛选&#xff0c;减少查询的时间复杂度。数据库索引有很多类型&#xff0c;这里不展开也不比较&#xff0c;只介绍最常见一种索引结构B树索引。mysql中InnoDB引擎默认使用的就是BTREE索引。 B树数据结构 …

实验三 Oracle数据库的创建和管理

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

fastjson-BCEL不出网打法原理分析

FastJson反序列化漏洞 与原生的 Java 反序列化的区别在于&#xff0c;FastJson 反序列化并未使用 readObject 方法&#xff0c;而是由 FastJson 自定一套反序列化的过程。通过在反序列化的过程中自动调用类属性的 setter 方法和 getter 方法&#xff0c;将JSON 字符串还原成对…

我在代码随想录|写代码Day9之28. 实现 strStr(),459. 重复的子字符串,55. 右旋字符串(第八期模拟笔试)

博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 28. 实现 strStr() 题目; 代码 1 class Solution { public: //KMPint strStr(string s, string t) {int n s.size(),mt.size();if(m0) return 0;s.insert(s.begin(), );t.insert(t.begin(), );vector<int> next(m1);…

容器技术1-容器与镜像简介

目录 1、容器与虚拟化 2、容器发展历程 3、镜像简介 4、镜像原理 &#xff08;1&#xff09;分层存储 &#xff08;2&#xff09;写时复制 &#xff08;3&#xff09;内容寻址 &#xff08;4&#xff09;联合挂载 1、容器与虚拟化 容器技术在操作系统层面实现了对计算机…