SpringBoot后端开发知识点总结(持续更新)

目录

  • 1. 常用易混淆注解解释
    • 1.1 @Resource和@Autowired注解的区别
    • 1.2 @PathVariable和@RequestParam注解的区别
  • 2. Mybatis-Plus高级特性
    • 2.1 强大的通用CRUD接口
    • 2.2 代码生成器
  • 3. IDEA实用快捷键
  • 4. 前后端联调关键点
    • 4.1 代码示例
    • 4.2 联调要点
    • 4.3 调试技巧

1. 常用易混淆注解解释

1.1 @Resource和@Autowired注解的区别

在Spring框架中,@Resource@Autowired都是用于依赖注入的注解,但有以下关键区别:

特性@Autowired@Resource
来源Spring框架Java标准(JSR-250)
注入方式默认按类型(byType)默认按名称(byName)
必需性默认必须(可设required=false)非必须
指定名称需配合@Qualifier直接使用name属性
构造函数注入支持不支持
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import javax.annotation.Resource;// 服务接口
interface PaymentService {void pay();
}// 实现类1
@Service("wechatPay")
class WechatPay implements PaymentService {public void pay() {System.out.println("微信支付");}
}// 实现类2
@Service("aliPay")
class AliPay implements PaymentService {public void pay() {System.out.println("支付宝支付");}
}// 客户端类
@Service
class ShoppingCart {/* 最常用场景对比 */// 1. 按类型注入(默认方式)@Autowired  // Spring方式:存在多个实现时会报错private PaymentService typeInjectedService;@Resource   // Java标准方式:会退化成按名称注入(变量名作为bean名称)private PaymentService resourceInjectedService;// 2. 按名称注入(解决多个实现问题)@Autowired@Qualifier("wechatPay")  // Spring方式:需要两个注解private PaymentService qualifiedService;@Resource(name = "aliPay")  // Java标准方式:一个注解搞定private PaymentService namedResourceService;// 3. 构造函数注入(推荐方式)private final PaymentService constructorInjected;@Autowired  // 唯一支持构造器注入的方式(Spring 4.3+可省略)public ShoppingCart(PaymentService constructorInjected) {this.constructorInjected = constructorInjected;}/* 实际使用示例 */public void checkout(int paymentType) {switch(paymentType) {case 1:qualifiedService.pay();    // 明确使用微信支付break;case 2:namedResourceService.pay(); // 明确使用支付宝break;default:constructorInjected.pay(); // 使用默认注入的实现}}
}

1.2 @PathVariable和@RequestParam注解的区别

这两个注解都用于从HTTP请求中获取参数,但使用场景不同:

特性@PathVariable@RequestParam
参数位置URL路径部分URL查询字符串
示例URL/user/{id}/user?id=123
是否必需默认必需可选(可设required=false)
多值处理不支持支持(数组/集合)
// @PathVariable 示例
@GetMapping("/users/{userId}")
public User getUser(@PathVariable String userId) {// ...
}// @RequestParam 示例
@GetMapping("/users")
public User getUser(@RequestParam(required = false) String name) {// ...
}

2. Mybatis-Plus高级特性

Mybatis-Plus在Mybatis基础上提供了诸多便利功能:

2.1 强大的通用CRUD接口

内置通用Mapper,无需编写简单SQL

分类方法示例说明
插入insert(T entity)插入一条记录
删除deleteById(Serializable id)根据ID删除
deleteBatchIds()批量删除(根据ID集合)
更新updateById(T entity)根据ID更新
update(entity, wrapper)根据条件更新
查询selectById()根据ID查询
selectOne()查询一条记录(结果多条会报错)
selectList()查询列表
selectCount()查询总数
分页selectPage()分页查询

2.2 代码生成器

一键生成Entity、Mapper、Service等

在这里插入图片描述

3. IDEA实用快捷键

功能Windows快捷键
全局搜索Double Shift
当前文件查找Ctrl+F
在所有文件/模块/文件夹查找Ctrl+Alt+F
代码格式化Ctrl+Alt+L
重写方法Ctrl+O
重写/实现方法Ctrl+I
AI智能补全Tab
输入表达式后使用此后缀快速生成变量.var

4. 前后端联调关键点

4.1 代码示例

// 正确示例 - 参数名与后端一致
methods: {deleteInterviewer(interviewerId) {...}).then(() => {var params = {interviewerId: interviewerId}
deleteInterviewer: function(params) {return instance({url: '/interviewer/delete',method: 'delete',params: params})
}

后端接口:

@DeleteMapping("/delete")
public Result delete(@RequestParam String interviewerId) {// 参数名必须与前端一致service.delete(interviewerId);return Result.ok();
}

4.2 联调要点

  1. 命名一致性:前后端参数名严格一致
  2. 请求方式匹配
    • GET - 查询
    • POST - 创建
    • PUT - 更新
    • DELETE - 删除
  3. 数据格式
    • 明确约定JSON字段命名风格(驼峰/下划线)
    • 日期格式统一(如yyyy-MM-dd HH:mm:ss)

4.3 调试技巧

使用Postman测试接口

在这里插入图片描述

开启SpringBoot的SQL日志:

mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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

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

相关文章

电脑商城--用户收货管理

新增收货地址 1 新增收货地址-创建数据表 1.使用use命令先选中store数据库。 USE store; 2.在store数据库中创建t_address用户数据表。 CREATE TABLE t_address (aid INT AUTO_INCREMENT COMMENT 收货地址id,uid INT COMMENT 归属的用户id,name VARCHAR(20) COMMENT 收货人姓…

开发者避坑:接入Flux-Kontext API实现文生图、图生图功能

在数字化浪潮背景下,人工智能(Artificial Intelligence, AI)技术正加速重塑图像创作领域。智创聚合API平台近日宣布整合Flux-Kontext系列模型,通过API接口支持图生图和文生图功能,为开发者及创作者提供高效解决方案。此…

.Net Core 获取与bin目录相同文件路径的文件

在 .NET Core 中,您可以使用以下方法来获取与 bin 目录相同的文件路径。通常,bin 目录是应用程序编译后生成的输出目录,您可以使用 AppContext.BaseDirectory 或 Directory.GetCurrentDirectory() 来获取该目录的路径。 以下是一些常用的方法…

RN(React Native)技术应用中常出现的错误及解决办法

React Native 作为跨平台开发框架,在实际应用中可能会遇到一些常见的错误。以下是React Native 技术应用中常出现的错误及解决办法: 1. 网络请求失败(Network Request Failed) 原因: 请求地址不正确网络权限未配置i…

Java 21 的虚拟线程与桥接模式:构建高性能并发系统

Java 21 的虚拟线程与桥接模式:构建高性能并发系统 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…

HTML5 火焰字体效果教程

HTML5 火焰字体效果教程 这里写目录标题 HTML5 火焰字体效果教程前言项目概述基本原理项目结构详细实现步骤1. HTML结构2. CSS样式3. JavaScript实现 代码详解1. 初始化设置2. 粒子系统3. 生成粒子4. 动画循环5. 交互控制 扩展和优化建议总结完整代码 前言 在这篇教程中&#…

SMOTE-XGBoost实战:金融风控中欺诈检测的样本不平衡解决方案

1. 行业问题背景 (1)金融欺诈检测的特殊性 在支付风控领域,样本不平衡是核心痛点。Visa 2023年度报告显示,全球信用卡欺诈率约为0.6%,但单笔欺诈交易平均损失高达$500。传统机器学习模型在此场景下表现堪忧&#xff1…

Instagram下载保存 -下载狗解析工具

在日常浏览Instagram时,是否有过这样的烦恼:看到一个精彩的视频,想要保存下来,却不知道如何操作?有时候我们会看到一些特别的旅行视频、搞笑片段,甚至是喜欢的名人分享的内容,简直是舍不得错过。…

flink如何基于Pekko实现RPC调用

摘要 通过阅读flink源码,了解flink是如何基于Pekko实现远程RPC调用的 Pekko实现远程调用 Flink 的 RPC 框架底层是构建在 Pekko 的 actor 模型之上的,了解Pekko如何使用,对后续源码的阅读有帮助。 Apache Pekko(原为 Akka 的一…

Kafka节点注册冲突问题分析与解决

一、核心错误分析 ERROR Error while creating ephemeral at /brokers/ids/1, node already exists and owner does not match org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode NodeExists问题本质:ZooKeeper中已存在ID为1的broker节…

突破PPO训练效率瓶颈!字节跳动提出T-PPO,推理LLM训练速度提升2.5倍

突破PPO训练效率瓶颈!字节跳动提出T-PPO,推理LLM训练速度提升2.5倍 在大语言模型(LLM)通过长思维链(CoT)展现出强大推理能力的当下,强化学习(RL)作为关键技术却面临训练…

【Python】dictionary

1 字典功能 字典是可变容器模型&#xff0c;且可存储任意类型对象&#xff1b; 字典的每个键值对 <key: value> 用冒号 : 分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key2 : value…

【python】If 语句

1 使用if 进行条件判断 1.1 检查字符串是否相等 car bmw car BMW # FALSEcar bmw car.upper() BMW # true # 变小写用方法&#xff1a;lower1.2 检查字符串是否不相等 my_car yadeaif my_car ! Audi:print("Buy one! Buy one! Buy one!")1.3 比较数字 answe…

Knife4j 使用详解

一、概述 Knife4j 是一款基于 Swagger 的开源 API 文档工具&#xff0c;旨在为 Java 开发者提供更美观、功能更强大的 API 文档生成、展示和调试体验。它是 Swagger-Bootstrap-UI 的升级版&#xff0c;通过增强 UI 界面和扩展功能&#xff0c;解决了原生 Swagger UI 界面简陋、…

Java excel坐标计算

package com.common.base.util.excel;/*** excel 坐标计算*/ public class UtilExcelPosi {/*** deepseek生成 ExcelProperty(index UtilExcelPosi.pA)*/public final static int pA 0;public final static int pB 1;public final static int pC 2;public final static i…

【JavaWeb】Servlet+JSP 实现分页功能

文章目录 思路数据抽出功能设计 功能模块工具类前端内容用户端数据处理 思路 数据抽出 需要显示的数据&#xff0c;查询的数据抽出&#xff1b;进行分页显示&#xff0c;需要统计抽出的件数&#xff0c;然后根据页面显示尺寸调整显示页面内容&#xff1b; 功能设计 翻页需要…

SpringBoot-准备工作-工程搭建

目录 1.创建空项目 2.检查项目jdk版本 3.检查Maven的全局配置 4.配置项目的字符集 5.创建SpringBoot工程 1.创建空项目 2.检查项目jdk版本 3.检查Maven的全局配置 4.配置项目的字符集 5.创建SpringBoot工程

01、python实现matlab的插值算法,以及验证

import numpy as np from scipy.interpolate import griddata import sys def griddata_wrapper(x, y, v, xq, yq, method): """ 包装scipy的griddata函数,支持单个点或多个点的插值 """ try: # 将输入转换为numpy数组…

React ahooks——useRequest

目录 简介 1. 核心功能 2. 基本用法 3. 高级用法 &#xff08;1&#xff09;轮询请求&#xff08;Polling&#xff09; &#xff08;2&#xff09;防抖&#xff08;Debounce&#xff09; &#xff08;3&#xff09;依赖刷新&#xff08;refreshDeps&#xff09; &#x…

re正则、Xpath、BeautifulSouplxml 区别

目录 1. re 正则表达式2. XPath3. BeautifulSoup + lxml4. 功能特性对比5.对比与建议在网页数据解析中,正则表达式(re)XPath(常结合lxml)BeautifulSoup(常依赖解析器如lxml)是三种主流技术,各有核心差异和适用场景。 1. re 正则表达式 优势:文本匹配效率高,尤其适用于…