Java 项目中常用注解汇总!! (自整理)

news2024/12/23 6:43:57

Spring框架的注解

@PostMapping("/getDetails")   post请求   映射到接口               @RequestBody    用来接收HTTP请求体中参数

@GetMapping("/getDetails")     get请求   映射到接口               @RequestParam   用来接收URL中的查询参数

@PutMapping

@DeleteMapping

@Api(tags = "部门****")   用于对整个控制器类进行说明,可通过tags属性来描述该控制器的功能,方便在Swagger文档中进行分类显示。

@RestController           这表示这是一个RESTful风格的Controller 会自动将返回的数据 转换为JSON格式  是Spring Framework 中用于标识 RESTful Web 服务的控制器(Controller)的注解之一

@RequestMapping(/system/**)  用于映射接口的根路径    例:http://127.0.0.1:8009/test/getDetails

@Resource                用于注入依赖实例

@ApiOperation            用于对接口方法 进行说明 可通过value属性来描述该方法的功能 方便在Swagger文档中进行分类显示。

@Tag(name = "部门****")  

@Operation(summary = "获取用户列表")  这俩个也是api文档注解

@PathVariable   是 Spring MVC 中用于从 URI 模板中提取变量值的注解。当你的请求路径 中包含占位符(例如 /users/{userId}),你可以使用 @PathVariable 注解 将占位符中的值映射到方法的参数上

@GetMapping("/users/{userId}")
public ResponseEntity<User> getUserById(@PathVariable Long userId) {
   // 方法体
}

@Validated     Spring Framework 中用于开启方法级别的参数验证的注解

@PostMapping("/createUser")
public ResponseEntity<String> createUser(@Validated @RequestBody User user) {
}

@Validated 注解用于开启方法级别的参数验证,而 @RequestBody 注解用于将请求体中的数据映射到 User 对象

在User类中的  @NotNull  @Email  @Size(min = 5, max = 10).....

对这些参数设置的限制信息进行校验

@Autowired   是 Spring Framework 中用于进行依赖注入的注解。它可以被用于字段、构 造函数、Setter 方法等地方,用于告诉 Spring 容器将相应类型的 Bean 注 入到被注解的元素中

@Log(title = "部门管理", businessType = BusinessType.UPDATE)

自定义的日志记录注解 用于记录系统中不同操作的日志信息

title 属性可能用于指定日志的标题或名称,用于区分不同类型操作的日志记录

businessType 属性可能表示业务类型或操作类型,用于记录操作的种类(delete,update...)

@Log(title = "部门管理", businessType = BusinessType.DELETE)

@RequiresPermissions 注解是 Apache Shiro 框架中用于进行权限控制的注解

@RequiresPermissions("user:create") 表示 createUser 方法需要用户具有 "user:create" 权限才能被执行。如果当前用户没有这个权限,将会抛出 UnauthorizedException 异常

    

@PreAuthorize 是 Spring Security 框架中用于进行方法级别的访问控制的注解之一

@ss.hasPermi('system:user:remove') 中的 @ss.hasPermi 可能是一个自定义的方法,用于检查用户是否有指定的权限

@Service    是 Spring Framework 中的注解之一,用于标识一个类作为服务层组件

Spring 框架将被注解的类纳入 Spring 容器的管理,从而可以在应用程序的其他部分(如控制器、其他服务类等)中通过依赖注入来使用该服务。

@Override     是 Java 中的注解,用于告诉编译器,被注解的方法是重写(覆盖)了父类 (或接口)中的方法 如果使用了 @Override 注解但实际上没有覆盖父类的方 法,编译器就会报错(在impl 接口实现层)

@Transactional   是 Spring Framework 中用于声明事务行为的注解。它可以应用于类级别或方法级别,表示被注解的方法或类将被包装在一个事务中

@Mapper     在 MyBatis 中,@Mapper 注解用于标识一个 Java 接口是 MyBatis 的映射  器。使用 @Mapper 注解告诉 MyBatis 扫描这个接口,并为它创建一个代 理对象,从而可以在代码中调用这些方法来执行数据库操作 主要用于 MyBatis 的映射器接口

@Repository  用于标识一个类是数据访问对象(DAO)。它通常与持久层的实现类一起使 用,用于将数据访问异常(例如 DataAccessException)转换为 Spring 的数据 访问异常体系。@Repository 注解还启用了 Spring 的异常转换机制,将数据 库操作中的异常转换为 Spring 的数据访问异常,使得上层调用者可以更容易 地处理异常 用于 Spring 的数据访问对象

mapper文件中 MyBatis 中用于配置 SQL 映射的注解

@Select    注解用于映射一个查询操作,可以标注在接口的方法上或者是 XML 映射文件 的 <select> 元素上。它指定了要执行的 SQL 查询语句

@Insert @Delete @Update .....  如上

@Results 和 @Result

注解一起使用,用于定义查询结果的映射关系。@Results 注解标注在接口的方法上或者是 XML 映射文件的 <resultMap> 元素上,表示一个结果集映射。而 @Result 注解则用于指定一个属性和数据库字段之间的映射关系

@One 和 @Many

注解用于处理一对一和一对多的关联关系。它们通常与 @Result 注解一起使用,以指定不同实体之间的映射关系

@Param     是 MyBatis 中用于指定传递给 SQL 查询的参数的注解。它主要用于将方法参 数与 SQL 查询中的参数进行映射

@Options   用于配置一些可选的属性,例如主键自动生成策略

@Insert("INSERT INTO users (username, password) VALUES (#{username}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);

@SelectKey:用于配置查询操作后获取生成的主键。

@Insert("INSERT INTO users (username, password) VALUES (#{username}, #{password})")
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", before = false, resultType = Long.class)
void insertUserAndGetId(User user);

MyBatis 框架中的 XML 映射文件

sql.xml 文件

resultMap 标签

这段 XML 代码定义了一个名为 "SysUserResult" 的结果映射(resultMap),用于将数据库查询结果映射到 Java 对象 SysUser 中。

<resultMap type="SysUser" id="SysUserResult">: 这行代码表示正在创建一个结果映射,指定了它的类型是 SysUser,并且赋予了它一个 ID 名称为 "SysUserResult",以便在后续的 SQL 映射中引用。

<id property="userId" column="user_id" />: 这个部分将数据库表中的 "user_id" 列映射到 SysUser 对象的 userId 属性。这个属性通常代表对象的主键。

<result property="deptId" column="dept_id" />: 类似地,将数据库中的 "dept_id" 列映射到 SysUser 对象的 deptId 属性。

<association property="dept" javaType="SysDept" resultMap="deptResult" />: 这是一个复杂类型的映射,它将 SysUser 对象中的 dept 属性映射到另一个复杂类型对象 SysDept。这意味着在查询 SysUser 对象时,可以将相关的 SysDept 对象作为属性关联起来。deptResult 是另一个 resultMap 的引用,用于映射 SysDept 对象的属性。

<collection property="roles" javaType="java.util.List" resultMap="RoleResult" />: 这个部分定义了一个集合属性 roles,它是 SysUser 对象的一个属性,表示一个用户可能有多个角色。这个集合的类型是 java.util.List,并且它的元素类型是 RoleResult resultMap 所定义的类型。这允许将查询到的多个角色映射为一个角色列表。

总的来说,这个 <resultMap> 定义了如何将数据库查询的列映射到 SysUser 对象及其关联对象(SysDept 和角色列表)的属性上,为 MyBatis 提供了一个详细的映射配置。

<sql>   标签通常用于存储可复用的 SQL 片段,以便在文件中的多个地方重用相同的 SQL 代码段。通过这种方式,可以提高代码的可读性、可维护性和重用性    id 属性指定了这个 SQL 片段的标识符为 "selectDeptVo"

<select> 元素是用来执行查询操作的,表示你希望从数据库中检索数据。

除此之外 还有 <update> <delete> ......

id="selectDeptById":这是这个查询语句的唯一标识符。在 MyBatis 中,每个 SQL 查询语句都必须有一个唯一的标识符,以便在 Java 代码中引用它

parameterType="Long":这指定了查询语句的输入参数类型。在这种情况下,这个查询期望一个类型为 Long 的参数。这通常用于传递查询所需的条件,例如通过部门的ID来查询相关信息。

resultMap="SysDeptResult":这指定了查询结果的映射规则。在 MyBatis 中,可以使用 <resultMap> 元素定义如何将数据库查询结果映射到 Java 对象。SysDeptResult 可能是一个预先定义的结果映射,规定了如何将数据库中的字段映射到 Java 对象的属性。

@ApiImplicitParams  是一个包含多个@ApiImplicitParam的容器

@ApiImplicitParam   用于具体描述每个参数 通过"name"指定名 "value"来描述参数的含 义  "require" 来标识参数是否必"dataType" 来指定参数的数据类型

@slf4j           进行日志统计

Lombok注解

@Data             它可以自动生成类的常用方法,如 toString()、equals()、hashCode()、 getter 和 setter 等方法。使用 @Data 注解可以简化代码,并避免手动 编写这些常用方法

Swagger注解

@ApiModel          用于描述数据模型的信息

@ApiModelProperty  用于描述模型的属性信息。在这里,我们将 e_id 字段注解为一个属性,并指定了它的名称为 "id",描述为 "id",并标记为必需属性(required = true)

MyBatis框架注解

@Select           用于执行搜索操作的SQL操作

@Update           用于执行更新操作的SQL操作

@Insert           用于执行插入操作的SQL操作

@Delete      用于执行删除操作的SQL操作

@SelectProvider   允许使用自定义的 SQL 提供者类来动态生成 SQL 查询语句

@UpdateProvider   允许使用自定义的 SQL 提供者类来动态生成 SQL 查询语句

@InsertProvider   允许使用自定义的 SQL 提供者类来动态生成 SQL 查询语句

@Options          提供了一些选项,例如设置主键自增等

例子:

 1.  @Select("SELECT * FROM company WHERE name = #{name}")

    List<Test> searchByExactName(@Param("name") String name);


 

2.  @Update("UPDATE company SET name = #{name}, age = #{age}, address = #{address}, salary = #{salary} WHERE id = #{id}")

    int update(Test test);

@Select:

用于标识一个方法是查询操作,该方法会执行一个 SQL 查询语句并返回结果。

@Select 注解中的 value 属性用于指定要执行的 SQL 查询语句。

#{name} 是一个参数占位符,表示查询语句中的一个参数,@Param("name") String name 表示方法的参数名为 name,并将方法中的 name 参数映射到 SQL 查询语句中的 #{name} 占位符上。

@Update:

用于标识一个方法是更新操作,该方法会执行一个 SQL 更新语句并返回更新影响的行数。

@Update 注解中的 value 属性用于指定要执行的 SQL 更新语句。

#{name}, #{age}, #{address}, #{salary}, #{id} 都是参数占位符,表示更新语句中的多个参数,这些参数分别对应了 Test 实体类中的字段,而在 update 方法的参数 Test test 中,这些字段会被映射到对应的参数占位符上。

1, @SpringBootApplication

包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主类上;

相关注解                         说明

@ComponentScan            用来自动扫描被这些注解标识的类,最终生成ioc容器里的 bean,默认扫描范围是@ComponentScan注解所在配置类包 及子包的类

@SpringBootConfiguration 与@Configuration作用相同,都是用来声明当前类是一个配 置类,这里表明是springboot主类使用的配置类

@EnableAutoConfiguration 是springboot实现自动化配置的核心注解,通过这个注解把 spring应用所需的bean注入容器中

  1. @Component、@Service、@Controller、@Repository 都是将类注入到spring容器中,

@Component,@Service,@Controller,@Repository注解标注的类,这些类会被纳入进spring容器中管理。

注解           说明

@Repository 持久层(dao)注入spring容器

@Service 业务逻辑层(server)注入spring容器

@Controller 控制层(controller)注入spring容器

@Component 普通pojo注入spring容器

3.@ResponseBody可以作用在方法上或类上,表示该方法的返回结果直接写入 HTTP response body 中,而不会被解析为跳转路径,即不会经过视图解析器,返回什么数据即在页面输入什么数据。@ResponseBody的作用其实是将java对象转为json格式的数据。

4.@RestController

该注解是@Controller和@ResponseBody的结合体,一般用于类,作用等于在类上面添加了@ResponseBody和@Controller

5.@AutoWired、@Qualifier、@Resource

这3个注解都是基于注解方式进行自动装配,在容器里面将查找到的bean返回,一般@AutoWired用得最多,@Qualifier则需要配合@AutoWired使用,@Resource则是可以通过名字进行自动装配

5.1

5.2@Qualifier  当有一个接口的多个实现类时,只用@AutoWired会报错,因为它有多个接口的实现类,不知道你要找哪一个,这个时候就需要在注入bean的时候起个名字,然后用@Qualifier注解指定哪一个bean(按照名字注入与装配)

接口实现类1,bean注入并起名字

接口实现类2,bean注入并起名字

两个注解的配合使用实现bean的自动装配

5.3@Resource   该注解的使用相当于@AutoWired和@Qualifier配合使用的效果

Resource(name="sayHello")

private SayHello sayhello

6.@RequestMapping、@GetMapping、@PostMapping

注解 说明

@RequestMapping @RequestMapping(url),通过该注解就可以通过配置的url进行访问,方式可以是get或post请求,两种方式均可

@GetMapping @GetMapping(url) ,功能类似的,只是这个限定了只能是Get请求

@PostMapping @PostMapping(url),功能类似的,只是这个限定了只能是Post请求

  1. @Value、@ConfigurationProperties、@PropertySource

注解 说明

@Value 用于获取bean的属性,一般用于读取配置文件的数据,作用在变量上

在yml配置文件设置数据变量  mag:dev-信息

读取在类内部    @Value(${msg})  prvite String msg;

@ConfigurationProperties 用于注入Bean属性,然后再通过当前Bean获取注入值,作用在类上


在yml配置文件设置数据变量

 student:

name:信息

age:12

读取在类外部作用于整个类   

 @ConfigurationProperties(prefix="student")  

public class Student{

String name;

String age;     //类的字段名必须和配置文件的字段名一致

}      //!! 要有getter 和 setter 方法才能注入成功

@PropertySource 用于指定要读取的配置文件,可以和@Value或@ConfigurationProperties配合使用

//PropertySource不支持yml文件读取   

案例配置文件people.properties ==>     people.name = 灰太狼 people.sex =男  

@PropertySource(value={ "classpath: people.properties " },encoding="utf-8")

@ConfigurationProperties(prefix="people")

8.@Configuration、@Bean

@Configuration作用于类上面,表明这是一个配置类,@Bean产生一个Bean对象加入Spring IOC容器

//一般这两个注解同时配合使用

注解 说明

@Configuration 作用于类上表示这是一个配置类,可理解为用spring的时候xml里面的< beans>标签

@Bean 产生bean对象加入容器,作用于方法,可理解为用spring的时候xml里 面的标签

9.@RequestParam、@RequestBody、@PathVariable、@RequestHeader、@CookieValue

注解 说明

@RequestParam 获取查询参数。即url?name=这种形式     

@RequestParam主要用于接收url?后面的参数,get或post请求,只要后面的url? 有参数都可以获取到对应的参数

@RequestParam注解有几个比较重要的属性,required 表示是否必须,默认为 true, 必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于 key值)。

@PathVariable 获取路径参数。即url/{id}这种形式。get获取post请求均可

@RequestParam 获取请求体数据(body),get没有请求体,,一般用于post获取参数  // 果要传多个参数过去只能将其封装成一个类,如果是出现了多个@RequestBody 注解访问的时候会报400错误

@RequestHeader 获取请求头的信息

例: public String requestBody03(@RequestHeader(name = 'Content-Type') String contentType){

return  contentType;

}

@CookieValue 获取Cookie的信息例:

@GetMapping("/demo3")

public void demo3(@RequestHeader(name = "myHeader") String myHeader,

         @CookieValue(name = "myCookie") String myCookie) {

      System.out.println("myHeader=" + myHeader);

       System.out.println("myCookie=" + myCookie);

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YaRN方法:无需微调,高效扩展语言模型上下文窗口/蚂蚁集团与浙大发布原生安全框架v1.0,引领企业网络安全新时代 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 YaRN方法&#xff1a;无需微调&#xff0c;高效扩展语言模型上下文窗口 蚂蚁…

将form表单中的省市区的3个el-select下拉框的样式调成统一的间隔距离和长度,vue3项目iot->供应商管理

省市区是用3个el-select组成的 在表单中用el-col&#xff0c;会导致3个下拉的距离不统一&#xff0c;市和区的前面也是不需要文字label的 如何解决:用vue3的:deep()进行样式穿透&#xff0c;由于el-form-item标签都是一样的&#xff0c;为了能准确的找到市的el-form-item&…

什么是机器学习

前言 机器学习&#xff08;Machine Learning, ML&#xff09;是一个总称&#xff0c;用于解决由各位程序员自己基于 if-else 等规则开发算法而导致成本过高的问题&#xff0c;想要通过帮助机器 「发现」 它们 「自己」 解决问题的算法来解决 &#xff0c;而不需要程序员将所有…

Python MD5加密的三种方法(可加盐)

方法一&#xff1a;MD5直接加密 import hashlibtext1123456 print(text1) mdhashlib.md5(text1.encode()) # 创建md5对象 md5pwdmd.hexdigest() # md5加密 print(md5pwd) 输出结果&#xff1a; 方法二&#xff1a;MD5盐加密&#xff0c;将盐拼接在原密码后 import ha…

Vatee万腾科技的独特力量:Vatee数字时代创新的新视野

在数字化时代的浪潮中&#xff0c;Vatee万腾科技以其独特而强大的创新力量&#xff0c;为整个行业描绘了一幅崭新的视野。这不仅是一场科技创新的冒险&#xff0c;更是对未来数字时代发展方向的领先探索。 Vatee万腾将创新视为数字时代发展的引擎&#xff0c;成为推动行业向前的…

TCP 重传、滑动窗口、流量控制、拥塞控制的剖析

TCP 是一个可靠传输的协议&#xff0c;那它是如何保证可靠的呢&#xff1f; 为了实现可靠性传输&#xff0c;需要考虑很多事情&#xff0c;例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题&#xff0c;也就无从谈起可靠传输。 那么&#xff0c;TCP 是…

清华大学提出全新加速训练大模型方法SoT

近日&#xff0c;微软研究和清华大学的研究人员共同提出了一种名为“Skeleton-of-Thought&#xff08;SoT&#xff09;”的全新人工智能方法&#xff0c;旨在解决大型语言模型(LLMs)生成速度较慢的问题。 尽管像GPT-4和LLaMA等LLMs在技术领域产生了深远影响&#xff0c;但其处…

Navicat 技术指引 | 适用于 GaussDB 的查询编辑器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

DNS的各种进阶新玩法

你们好&#xff0c;我的网工朋友&#xff0c;今天和你聊聊DNS。 01 什么是DNS&#xff1f; mac地址诞生&#xff0c;可是太不容易记忆了&#xff0c;出现了简化了IP形式&#xff0c;它被直接暴露给外网不说&#xff0c;还让人类还是觉得比较麻烦&#xff0c;干脆用几个字母算了…

【ARM CoreLink 系列 3.2 -- CCI-400,CCI-500, CCI-550 差异】

文章目录 CCI-400 和 CCI-500 差异ARM CCI-400ARM CCI-500ARM CCI-550CCI-400 和 CCI-500 差异 ARM的 CCI(Cache Coherent Interconnect)系列产品是用于多核处理器之间的高性能缓存一致性互连。CCI-400 和 CCI-500 是该系列中的两种设计,它们旨在允许多个处理器核心和其他资…

项目中如何配置数据可视化展现

在现今数据驱动的时代&#xff0c;可视化已逐渐成为数据分析的主要途径&#xff0c;可视化大屏的广泛使用便应运而生。很多公司及政务机构&#xff0c;常利用大屏的手段展现其实力或演示业务&#xff0c;可视化的效果能让观者更快速的理解结果并直观的看到数据展现。因此&#…

党建信息管理系统源码 支持在线交党费 附带完整的搭建教程

传统的党建管理模式通常采用手工方式&#xff0c;不仅效率低下&#xff0c;而且容易出错。随着组织规模的扩大和党员数量的增加&#xff0c;这种管理方式已经无法满足现实需求。此外&#xff0c;传统的党建管理模式缺乏在线交党费功能&#xff0c;给党员带来不便。因此&#xf…

图片转换成pdf格式的软件ABBYY16

ABBYY PDF这款提供多种图像处理选项&#xff0c;可提高源图像的质量&#xff0c;便于准确地识别光学字符。我们扫描纸质文档或从图像文件创建 PDF 时&#xff0c;务必选择合适的图像处理选项。而在ABBYY PDF 中包含下列图像处理选项。 识别文本 — 选择此选项会将文本层放在图…

关于JS stack trace解决办法

问题描述 npm run serve启动前端项目时&#xff0c;控制台输出下图一堆的文字&#xff0c;JS stack trace , 问题现象&#xff1a; JS stack trace Security context: 0000017B93ACFB61 <JS Object>1: init_scope_vars [0000017B93A04381 <undefined>:~3382] [p…

shopee数据分析软件丨探索Shopee数据分析软件——知虾

随着电子商务的快速发展&#xff0c;越来越多的商家和企业开始关注数据分析的重要性。在这个竞争激烈的市场中&#xff0c;了解消费者行为、市场趋势和竞争对手的策略是取得成功的关键。而Shopee数据分析软件——知虾&#xff0c;成为了许多商家和企业的首选工具。本文将深入探…

c++/windows软件绑定网卡加密,实现一机一码

&#x1f482; 个人主页:pp不会算法v &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 奇思妙想系列文章 一、c\c windows自动打开cmd并进入mysql 二、c\wind…

OpenMLDB v0.8.4 诊断工具全面升级

新的v0.8.4版本中&#xff0c;我们对于诊断工具进行了全面系统化的升级&#xff0c;以提供更加完整和智能化的诊断报告&#xff0c;有助于高效排查 OpenMLDB 集群问题&#xff0c;大幅提升运维效率。 相比于之前的版本&#xff0c;新的诊断工具增添一键诊断功能&#xff0c;使…

nodejs 如何将 Buffer 数据转为 String

问题说明 使用webSocket的时候出现了一个问题&#xff0c;前端小程序和nodejs后端建立websocket连接后&#xff0c;使用send方法发送到后端为buffer格式&#xff0c;以下为我前后端代码 1、前端小程序代码 //创建webSocket连接 const socket uni.connectSocket({url: wss…

中西部各省市翻译协会、公关协会会长金秋圆桌会议圆满结束

中西部翻译协会共同体、中西部公共关系协会共同体共同体创建8年来&#xff0c;已成功举办了八届翻译大赛。时值第九届中西部翻译大赛将拉开序幕&#xff0c;中西部翻译协会共同体、中西部公共关系协会共同体举办的2023年度中西部各省市翻译协会、公关协会会长金秋圆桌会议&…

linux安装zsh、oh-my-zsh及常用插件

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com&#xff0c;github地址为https://github.com/xjintong。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家访问。 一、安装zsh 这个不用多说了&#xff0…