当前位置: 首页 > news >正文

Spring boot 学习笔记2

Maven

  • 项目管理工具:Maven 通过 pom.xml(Project Object Model)文件描述项目配置,包括依赖、构建流程、插件等,实现项目标准化管理 
  • 依赖管理:自动下载并管理项目所需的第三方库(如 Spring、MyBatis),解决手动导入 Jar 包的繁琐问题。开发者只需在 pom.xml 中声明依赖坐标(GroupId、ArtifactId、Version),Maven 会从本地或远程仓库自动获取 
  • 构建自动化:提供编译、测试、打包、部署等一键式命令(如 mvn compilemvn package),标准化构建流程

在 Maven 项目的 pom.xml 中配置镜像源(如阿里云、腾讯云等)主要是为了解决依赖下载速度慢、网络不稳定等问题,同时提升开发效率和团队协作的灵活性。

  • Maven 默认从中央仓库(位于国外)下载依赖,国内访问速度慢,尤其对于大型项目或复杂依赖链,可能导致构建超时或失败 
  • 解决方案:在 pom.xml 中配置国内镜像源(如阿里云),将下载请求重定向到国内服务器,显著提升下载速度。例如:

1.@RequestParam

@RequestParam 是 Spring MVC 中的一个注解,用于将 HTTP 请求中的查询参数(Query Parameters)绑定到控制器方法的参数上。它非常适用于处理 GET 请求中的参数,但也可以用于其他类型的请求(如 POST 请求中的查询参数)。

示例代码

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ExampleController {@GetMapping("/search")public String search(@RequestParam String query) {return "You searched for: " + query;}
}

注意在查询时要通过查询参数添加参数

例如 http://localhost:8088/search?query=一万千 

2.Jpa动态生成查询方法

通过 Spring Data JPA 的方法命名规则动态生成

例如

@Repository
public interface libraryListRepository extends JpaRepository<book, Integer> {List<book> findByTitleAndAuthor(String title, String author);}

会动态生成查询title和author的方法

3.@Configuration

@Configuration 是 Spring 框架中的一个注解,用于定义配置类。它是一个核心注解,用于替代传统的 XML 配置文件,提供了一种基于注解的方式来定义 Spring 容器中的 Bean 和配置信息

4.@Bean

@Bean 是 Spring 框架中的一个注解,用于在配置类中定义一个 Bean。它告诉 Spring 容器,该方法返回的对象应该被注册为一个 Bean,并且可以被其他组件使用。@Bean 注解通常与 @Configuration 注解一起使用,以声明式地定义 Spring 容器中的 Bean。

@Bean 注解的方法在 Spring 容器初始化时被调用,其返回的对象被注册为一个 Bean。Spring 容器会管理这些 Bean 的生命周期,包括初始化、依赖注入、销毁等。

5.@RequiredArgsConstructor

@RequiredArgsConstructor 会生成一个构造函数,该构造函数包含所有标记为 final 或使用 @NonNull 注解的字段。这样可以确保在创建对象时,这些字段必须被初始化,从而避免 null 值导致的潜在问题。

6.final

主要用于确保某些变量、方法或类在初始化后不能被修改

 变量
  • 不可变性final 修饰的变量在初始化后不能被重新赋值。

  • 线程安全final 修饰的变量在多线程环境中是线程安全的,因为它们的值不会改变。

方法

  • 不可覆盖final 修饰的方法不能被子类覆盖。

  • 性能优化:在某些情况下,final 方法可以被 JVM 优化,因为它们不会被覆盖。

7.依赖注入

依赖注入(Dependency Injection, DI)是 Spring 框架的核心功能之一,它允许你将对象的依赖关系由 Spring 容器来管理,而不是在对象内部直接创建或查找这些依赖。这种方式可以显著提高代码的可维护性、可测试性和松耦合性。

Spring 支持多种依赖注入的方式,主要包括:

构造器注入

Setter 方法注入

字段注入

  • 直接在字段上使用 @Autowired 注解注入依赖。

  • 适用于非 final 字段,但不推荐在复杂场景中使用,因为它破坏了类的封装性。

依赖注入的步骤

  • 使用 @Bean 注解在配置类中定义 Bean。

@Configuration
public class AppConfig {@Beanpublic MyService myService(AnotherService anotherService) {return new MyService(anotherService);}
}
  • 在其他组件中,通过 @Autowired 注解注入所需的 Bean。

@Service
public class AnotherComponent {@Autowiredprivate MyService myService;public void doSomething() {myService.doSomething();}
}

如果存在多个相同类型的 Bean,Spring 会尝试通过以下方式解决歧义:

  • 使用 @Qualifier 注解指定具体的 Bean。

@Autowired
@Qualifier("specificBean")
private MyService myService;

或者是定义Bean的优先级

@Repository,@Controller,@Service都会把接口或者类注册成Bean在需要时注入

@Autowired:自动注入依赖。
@Qualifier:解决依赖注入时的歧义问题。
@Primary:指定优先级较高的 Bean。
@Value:注入配置文件中的值或表达式。
@Resource:注入依赖,类似于 @Autowired。
@Inject:注入依赖,类似于 @Autowired。
@Configuration:标记配置类,定义和管理 Bean。
@Component:标记组件类,Spring 会自动扫描这些类并将它们注册为 Bean。
@Controller:标记控制器类,处理 HTTP 请求。
@Repository:标记数据访问层类,Spring 会自动处理数据访问层的异常。
@Service:标记服务层类,包含业务逻辑。

8.Ollama

在 Spring AI 中,Ollama 是一个用于管理大型语言模型(LLM)的工具

首先对于这个你要添加对应的依赖

//ollama的springai启动项
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>${spring-ai.version}</version>
</dependency><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.1.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
@Bean
public ChatClient chatClient(OllamaChatModel model)
{return ChatClient.builder(model).defaultSystem("你是一个给书籍分类的工作人员").build();
}

注册一个bean就能使用了

9.调用ai接口

这里我调用的是moonshot模型,需要使用api可以去官网申请有免费的额度

<!--moonshot的依赖-->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-moonshot</artifactId><version>1.0.0-M7</version><type>pom</type>
</dependency>//如果说中央仓库没有这个依赖可以去阿里的镜像maven仓库
<repositories><repository><id>alimaven</id><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public</url></repository>
</repositories>

仓库服务

10.JPA

JPA(Java Persistence API)

JPA 是 Java EE 和 Java SE 的一部分,用于管理 Java 应用程序中的关系数据。它提供了一个标准的 ORM(对象关系映射)机制,允许开发者使用 Java 对象来操作数据库,而无需编写 SQL 语句。

@Entity
  • 作用:标记一个类为 JPA 实体类,表示这个类映射到数据库中的一个表

@Table
  • 作用:指定实体类映射到数据库中的表名。

@Id
  • 作用:标记实体类中的主键字段。

@GeneratedValue
  • 作用:指定主键的生成策略。

@Column
  • 作用:指定实体类中的字段映射到数据库表中的列。

@Modifying
  • 作用:标记一个方法为修改操作(如 UPDATEDELETE),通常用于自定义的 @Query 注解方法。

@Query
  • 作用:定义一个自定义的 JPQL 查询。

@Param
  • 作用:为查询方法中的命名参数指定名称。

 基于命名方法的查询

Spring Data JPA 提供了一种非常方便的方式来定义查询方法,只需根据方法名称的命名规则来定义方法即可。Spring Data JPA 会根据方法名称自动生成相应的查询。

示例

import org.springframework.data.jpa.repository.JpaRepository;public interface MessageBoardRepository extends JpaRepository<MessageBoard, Long> {int findLikesById(Long id);
}

11.JPQL

JPQL 是 Java Persistence Query Language 的缩写,它是 JPA(Java Persistence API)的一部分,用于操作持久化实体的查询语言。JPQL 与 SQL 类似,但它操作的是实体类及其属性,而不是数据库表及其列。这使得 JPQL 更加面向对象,与 Java 实体类的映射关系更加紧密。

JPQL 的特点

  • 面向对象:JPQL 操作的是实体类及其属性,而不是数据库表及其列。

  • 类型安全:JPQL 查询在编译时会进行类型检查,减少运行时错误。

  • 与数据库无关:JPQL 是一种高级抽象,与具体的数据库无关,便于在不同数据库之间迁移。

  • 集成性:JPQL 与 JPA 的其他功能(如实体管理器、事务管理等)无缝集成。

SELECT m FROM MessageBoard m

@Transactional 的作用

@Transactional 注解用于声明事务管理。它告诉 Spring 框架,被注解的方法应该在一个事务上下文中执行。如果方法执行过程中发生异常,事务将会回滚,确保数据的一致性。

何时需要使用 @Transactional

  • 执行更新操作:当你执行 INSERTUPDATEDELETE 等修改数据库的操作时,通常需要使用 @Transactional 注解。这是因为这些操作需要在一个事务中执行,以确保数据的一致性。

  • 执行复杂查询:如果你的查询操作涉及多个数据库操作,或者需要在查询后进行一些修改操作,使用 @Transactional 可以确保这些操作在一个事务中完成。

  • 默认事务管理:即使你的方法不直接执行更新操作,但调用了其他可能修改数据库的方法,使用 @Transactional 可以确保事务的一致性。

12.事务

事务管理的基本概念

事务是数据库操作的一个基本单位,它确保一系列操作要么全部成功,要么全部失败,从而保证数据的一致性。事务具有以下四个特性(ACID):

  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。

  • 一致性(Consistency):事务执行前后,数据库的状态保持一致。

  • 隔离性(Isolation):多个事务并发执行时,每个事务看到的数据是一致的,不会受到其他事务的干扰。

  • 持久性(Durability):事务提交后,其结果是永久性的,即使系统发生故障也不会丢失。

@Transactional 注解的作用

@Transactional 注解用于声明事务管理。它告诉 Spring 框架,被注解的方法应该在一个事务上下文中执行。具体来说:

  • 事务的开始:当方法被调用时,Spring 框架会自动开启一个新的事务。

  • 事务的提交:如果方法正常执行完成,Spring 框架会提交事务,将所有操作永久保存到数据库中。

  • 事务的回滚:如果方法执行过程中抛出异常,Spring 框架会回滚事务,撤销所有操作,确保数据库状态保持一致。

相关文章:

  • DAY27
  • Java设计模式之外观模式:从入门到精通(保姆级教程)
  • 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(2)
  • TYUT-企业级开发教程-第5章
  • Python编程从入门到实践 PDF 高清版
  • vue2.0 组件
  • Java大厂面试三轮问答:微服务与数据库技术深度解析
  • matlab绘制光学传递函数mtf曲线
  • 精益数据分析(69/126):最小可行化产品(MVP)的设计、验证与数据驱动迭代
  • 第35周Zookkeeper+Dubbo 面试题精讲
  • 经典密码学和现代密码学的结构及其主要区别(1)凯撒密码——附py代码
  • k8s集成环境中pod运行的容器退出码141故障解决方案及排查方向,其他退出码也可以参考此篇
  • javaScript学习第三章(流程控制小练习)
  • Spring的后置处理器是干什么用的?扩展点又是什么?
  • Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制
  • React集成百度【JSAPI Three】教程(001):快速入门
  • Python----目标检测(labelimg和labelme的安装与使用,Pycharm配置教程)
  • 养生指南:解锁健康生活新方式
  • BGP综合实验
  • Nginx基础知识
  • 昆明一小区火灾调查报告:七旬夫妇身亡,生前拾荒存放大量可燃物
  • 在越剧之乡嵊州,浙江音乐学院越剧学院成立
  • 技术派|台军首次试射“海马斯”火箭炮,如何压制这种武器?
  • 达恩当选罗马尼亚总统
  • 8000余万元黄金投入研发后“不知去向”,咋回事?
  • 雷军:小米芯片采用3纳米制程,首款SUV“YU7”即将发布