SpringBoot中的注解详解(二)

四、@Param() (mapper包 Dao层)

@Param():

  • 功能: 用于在Mapper接口的方法参数上标记参数名称,以便在SQL语句中引用这些参数。

  • 参数命名:在Mapper接口的方法参数上使用@Param注解,可以为参数指定一个名称。

  • SQL引用:在Mybatis的XML映射文件中,可以通过指定参数名称引用这些参数,使用#{参数名称}语法引用这些参数。

底层原理
  • 参数传递:MyBatis在调用Mapper接口的方法时,会将方法参数封装成一个Map对象。

  • 参数解析:在XML映射文件中,通过#{参数名称}语法,MyBatis会从Map对象中取出对应的参数值。

  • SQL执行:最终,MyBatis将解析后的参数值替换到SQL语句中,执行SQL查询或操作。

public interface BookMapper {// 分页查询数据方法List<Book> pageQuery(@Param("pageNum") int pageNum,@Param("pageSize") int pageSize,@Param("publisher") String publisher);// 分页查询总数据量的方法int count(@Param("publisher") String publisher);
}
	<select id="pageQuery" resultMap="bookResult"><include refid="baseQuery"/>where publisher like concat('%', #{publisher}, '%')limit ${(pageNum - 1) * pageSize}, ${pageSize}</select><select id="count" resultType="int">select count(*)from es_bookwhere publisher like concat('%', #{publisher}, '%')</select>
示例请求:

假设有一个请求URL如下:

http://localhost:8088/pages/index.html?username=admin&password=123456

  • username:用户名为admin

  • password:密码为123456

返回示例:

{"id": 1,"username": "admin","password": "123456","email": "admin@example.com"
}

结论:使用@Param注解,Mybatis能够正确的将请求参数传递到SQL查询中,并返回相应的用户信息。

五、@Component、@Autowired

@Component:

  • 功能:

    • 将类标记为Spring管理的Bean。使用@Component ,可以实现将类交给IOC容器管理。

    • Spring容器会在启动时自动扫描带有@Component注解的类,并将其注册为Bean。

  • 使用方式:

    • 在类声明上添加@Component注解。

  • 使用场景:

    • 服务类(Service层)、DAO类、工具类等需要被Spring管理的组件。

  • 放置位置:

    • 通常放在需要被Spring管理的类上,例如com.example.service包下的服务类。

@Autowired:

  • 功能:

    • 自动注入依赖的Bean。使用@Autowired ,就可以实现程序运行时IOC容器自动注入需要的依赖对象。

    • Spring容器会根据类型或名称自动查找并注入依赖的Bean。

  • 使用方式:在字段、构造函数或方法上添加@Autowired注解。

  • 使用场景:服务类之间的依赖注入;DAO类与服务类之间的依赖注入。

  • 放置位置:通常放在需要注入依赖的字段、构造函数或方法上

底层原理:

@Component:

  1. 组件扫描:Spring容器在启动时会扫描配置的包路径,查找带有@Component注解的

  2. Bean注册:找到这些类后,Spring容器会将它们注册为Bean,并管理其生命周期。

@Autowired:

  1. 依赖解析:Spring容器在初始化Bean时,会检查带有@Autowired注解的字段、构造函数或方法。

  2. 依赖注入:根据类型或名称自动查找并注入依赖的Bean。

  3. 默认行为:如果找不到匹配的Bean,Spring容器会抛出异常。可以通过@Autowired(required = false)允许注入失败。

@Component
public class CategoryService {@Autowiredprivate CategoryMapper categoryMapper;public List<Category> listChildren(){return categoryMapper.list();}
}

通过使用@Component@Autowired注解,Spring容器能够自动管理和注入依赖,简化了开发过程。

Spring框架为了更好的标识bean对象归属于哪一层,又提供了@Component衍生注解:

  • @Controller (标注在控制层类上)

  • @Service (标注在业务层类上)

  • @Repository (标注在数据访问层类上)

    实际Mybatis开发中,我们使用 @Mapper和@MapperScan 更多

六、@Builder(access = AccessLevel.PRIVATE)、@Getter

@Builder:

  • 作用:生成一个构造器类,用于创建不可变对象

  • 底层实现:在编译时,lombok会生成一个Result.ResultBuilder内部静态类,并为每个字段生成相应的setter方法和build方法(用于构建最终的对象)。

  • 生成的代码:

public static class ResultBuilder {private Integer code;private String message;private Object data;public ResultBuilder code(Integer code) {this.code = code;return this;}public ResultBuilder message(String message) {this.message = message;return this;}public ResultBuilder data(Object data) {this.data = data;return this;}public Result build() {return new Result(code, message, data);}
}

@Getter:

  • 作用:为类的每个字段生成 getter 方法。

  • 底层实现:在编译时,Lombok 会为每个字段生成相应的 getter 方法。

  • 示例:

public Integer getCode() {return this.code;
}public String getMessage() {return this.message;
}public Object getData() {return this.data;
}

success()方法:

  • 作用:创建一个表示成功的Result对象

  • 底层实现:调用构造器的方法来设置状态码、消息和数据,然后调用build方法构建对象。

public static Result success(String message, Object data) {return Result.builder().code(SUCCESS).message(message).data(data).build();
}

failure()方法:

  • 作用:创建一个表示失败的Result对象

  • 底层实现:调用构建器的方法来设置状态码的消息,然后调用build方法来构建对象

  • 示例:

public static Result failure(String message) {return Result.builder().code(FAILURE).message(message).build();
}

构造方法:

由于使用了@Builder注解,lombok会生成一个私有的构造方法,该构造方法接受所有的字段作为参数。

@Builder(access = AccessLevel.PRIVATE)

  1. 作用:生成一个私有的构建器类,防止外部直接实例化。

  2. 底层实现:生成的构建器类的构造方法和方法都是私有的。

  • 生成的构造方法:

private Result(Integer code, String message, Object data) {this.code = code;this.message = message;this.data = data;
}
  • 使用构造器模式:构造器模式是一种设计模式,用于创建复杂的对象。通过构造器,可以逐步设置对象的各个属性,最后调用build方法生成对象 (构造器模式可参考:)
Result result = Result.builder().code(1).message("操作成功").data(someData).build();
  • 使用静态工厂方法:静态工厂方法是一种创建对象的方式,通过类的静态方法来创建对象。这种方法可以提高代码的可读性和可维护性。
Result successResult = Result.success("操作成功", someData);
Result failureResult = Result.failure("操作失败");

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

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

相关文章

一文1800字使用Jmeter进行http接口性能测试!

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 为什么要做接口测试&#xff1f; 越底层发现b…

新版flask pin码计算

Python debug pin码计算 需开启debug from flask import Flask app Flask(__name__) app.route("/") def index():return "Hello World" app.run(debugTrue) /console路由填入上方控制台的 PIN 码即可执行 Python 命令 Flask 的 PIN 码计算仅与 werkze…

比 PyTorch 更快的嵌入Python库:FastEmbed

嵌入生成 已成为自然语言处理&#xff08;NLP&#xff09;中不可或缺的一部分。 无论是智能推荐、文本相似度计算&#xff0c;还是聊天机器人&#xff0c;嵌入技术都扮演着重要角色。然而&#xff0c;我们常常会陷入繁重的库和庞大的模型中&#xff0c;耗时费力。 今天&#…

大模型部署解决方案之TorchServe+vLLM

TorchServe 是PyTorch 中将模型部署到生产环境的一个解决方案。它用HTTP 或HTTPS API 封装模型&#xff0c;可以处理多种任务&#xff0c;包括为部署模型分配workers、负责客户端和服务器之间通信等。 10月份发布的TorchServe 0.12 增加了对GenAI的支持&#xff0c;简化了大语…

博弈论(零和博弈)英文版题解

翻译&#xff1a; 假设我们有一个两人零和游戏&#xff0c;每个玩家有两种行动&#xff0c;行收益矩阵如下&#xff1a; 计算行和列玩家的最小最大最优策略以及游戏的价值。 X Y A a11 a12 B a21 a22 选项&#xff1a; 1. 行玩家&#x…

虚拟现实辅助工程技术应用于员工培训

你还在使用传统的入职方法吗&#xff0c;比如印刷指南、演示、课堂培训、讲座等等&#xff1f;是时候改变了。虚拟现实辅助工程技术提供了一个机会&#xff0c;可以让新员工的入职过程更高效、更有趣&#xff0c;也更令人兴奋。想象一下这样一个场景&#xff0c;新员工可以在第…

【健康警钟】胆已切除,生活调理有“胆”更精彩!必看指南!

在现代社会&#xff0c;由于生活习惯、饮食习惯等多种因素&#xff0c;一些人可能不得不面对胆囊切除手术。虽然手术能够有效解决胆囊结石、胆囊炎等问题&#xff0c;但胆囊作为人体的一部分&#xff0c;其功能的丧失无疑会对生活带来一定影响。那么&#xff0c;胆被割了之后&a…

windows NGIMX配置WebSocket反向代理

linux下 据说nginx是要有 stream的模块 Linux安装Nginx步骤之后续&#xff0c;带stream模块-CSDN博客 Nginx从1.3.13版本就开始支持WebSocket linux 下参考如下链接 配置 Nginx 反向代理 WebSocket - 哈喽哈喽111111 - 博客园 (cnblogs.com) SSL的配置参考 【Linux】采用…

三种读取配置文件的方式

在编写JDBC的util包以读取文件时&#xff0c;配置文件的位置会影响其读取方式。当前&#xff0c;默认配置文件直接放置在src文件夹下。 当读取.properties文件代码写法为&#xff1a; Properties props new Properties(); props.load(new FileInputStream("db.propertie…

丹摩征文活动|CogVideoX-2b:从安装到上线,轻松搞定全过程!

CogVideoX-2b&#xff1a;从安装到上线&#xff0c;轻松搞定全过程&#xff01; CogVideoX简介 CogVideoX的推出标志着视频生成技术的一次重大突破。过去&#xff0c;如何在保持高效的同时提升视频质量一直是一个难题&#xff0c;但CogVideoX 通过其先进的3D变分自编码器&…

工位管理优化:Spring Boot企业级系统

3系统分析 3.1可行性分析 通过对本企业级工位管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业级工位管理系统采用SSM框架&#xff0c;JAVA作为开…

EMQX服务器的搭建,实现本地机和虚拟机之间的MQTT通信(详细教程)

前言 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的&#xff0c;这些特点使它适用范围非常广泛。 MQTT协议中有三种身份&#xff1a;发布者&#xff08;Publish&#xff09;、代理&#xff08;Broker&#xff09;&#xff08;…

Unity 热更新 之 一篇文章完全入门AssetBundle

本篇知识来源于unity官方手册以及siki学院的相关教程,链接如下,仅作学习分享 AssetBundle&#xff08;创建打包&#xff09;入门学习(基于Unity2017) - SiKi学院|SiKi学堂 - unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程 目录 0.热更新是什么 1.AssetBundl…

图片怎么去水印?5个简单好用的图片去水印方法分享!

在日常生活中&#xff0c;图片水印的去除需求时常涌现&#xff0c;无论是出于个人兴趣还是工作需求&#xff0c;掌握去水印技巧能让我们更自由地利用图片资源。今天&#xff0c;我们为您精心挑选并介绍五种实用的图片去水印方法&#xff0c;让您轻松上手&#xff0c;即刻提升图…

半导体测试领域CP和KGD的区别

在半导体测试领域&#xff0c;KGD&#xff08;Known Good Die&#xff09;和 CP&#xff08;Chip Probing 或 Chip Test&#xff09;是两个重要的概念&#xff0c;它们分别代表了不同阶段的测试和验证过程。下面详细解释这两者的区别&#xff1a; CP&#xff08;Chip Probing …

人机融合智能中的系统与还原

一、人工智能中的系统与还原 人工智能&#xff08;AI&#xff09;作为现代科技的重要组成部分和应用涉及多个学领域&#xff0c;包括计算机科学、学、神经科学等人工智能的研究中系统的概念至关重要。系统不仅仅是简单的组件集合&#xff0c;更多地体现为各个部分之间的相互作用…

这可能是2024年看过最全最详细的Java面试八股文

前言: 本文收集整理了各大厂常见面试题 N 道&#xff0c;你想要的这里都有内容涵盖&#xff1a;Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈&#xff0c;希望大家都能找到…

010_SSH_Sqlserver多媒体技术与应用课程网(学习资料+前台考试)_lwplus87

目 录 摘 要... III Abstract V 第1章 概述... 1 1.1 课题背景... 1 1.2 课题意义... 2 1.3开发工具及技术... 2 1.3.1 MyEclipse. 2 1.3.2 Tomcat 2 1.3.3 SqlServer 3 1.3.4 JSP. 3 1.4国内外现状... 4 第2章 可行性分析及总体设计原则... 5 2.1可行性分析…

免费数字孪生平台打造物流数据可视化大屏,助力消费跑出加速度

在当今快速发展的时代&#xff0c;物流行业已成为连接生产与消费的重要桥梁。2024年&#xff0c;中国物流行业再次刷新纪录&#xff0c;8月13日&#xff0c;我国第1000亿件快递已顺利产生&#xff0c;比2023年提前了71天&#xff0c;这一速度令人惊叹。而在这背后&#xff0c;物…

Navict15 过期处理删除注册表

1.winR 注册表输入regedit 2.搜索输入HKEY_CURRENT_USER\Software\PremiumSoft\Navicat 3.输入HKEY_CURRENT_USER\Software\Classes\CLSID&#xff0c;找到只有一个info的&#xff0c;把包含info的这个文件夹删了。