SpringBoot3基础篇


Spring Boot基础篇

创建工程

SpringBoot是Spring提供的一个子项目,用于快速构建Spring应用程序。

SpringBoot特性

  • 起步依赖:本质是一个Maven坐标,整合了完成一个功能需要的所有坐标。
  • 自动配置:约定大于配置原则,在boot程序启动后,一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发。
  • 其他特性:内嵌的Tomacat、Jetty(无需部署WAR文件);外部化配置;不需要XML配置(而使用properties/yml进行少量配置)等。

自动创建:

  • 创建Maven工程
  • 导入spring-boot-starter-web起步依赖
  • 编写Controller
  • 提供启动类

a.创建工程

b.idea自动导入起步依赖

配置好maven并且写好controller后,运行启动类会自动配置好configurations。


配置本地maven

IDEA maven 配置:https://blog.csdn.net/qq_42057154/article/details/106114515

maven下setting.xml中配置阿里云镜像,配置默认JDK版本

手动创建:

  • 创建Maven工程
  • 引入依赖
  • 提供启动类

a.手动创建Maven工程

b.手动创建Maven工程

设置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.1</version>
    </parent>
    <groupId>com.nusqx</groupId>
    <artifactId>springboot-create-manual</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

设置启动类、创建resources目录及目录下的application.properties配置文件。

配置文件(properties 和 yaml 二选一)

properties配置文件

application.properties可以被springboot自动识别。

spring.application.name=springboot-start
# 服务端口
server.port=9090
# 虚拟目录:http://localhost:9090/start/hello
server.servlet.context-path=/start

Common Application Properties :: Spring Boot 官网

yaml配置文件(首选,层次更清晰,更关注数据)

application.yml 或 application.yaml

server:
  port: 9191
  servlet:
    context-path: /start2

yml配置信息书写与获取

书写:

值前边必须有空格,作为分隔符;

使用空格作为缩进表示层级关系,相同的层级左侧对齐;


yml配置信息书写

加email前缀防止键名重复。

获取:

@Value("${键名}")


yml配置信息获取之Value注解

简化@Value注解,使用

@ConfigurationProperties(prefix="前缀")

相同层级的共同前缀;

实体类的成员变量名与配置文件中的键名保持一致;


yml配置信息获取之ConfigurationProperties注解
# yml
# 发件人相关信息
email:
	user: nusqx@qq.com
	code: pazubwsphisacjha
	host: smtp.qq.com
	auth: true
	
# 学生爱好(数组)
hobbies:
	- 打篮球
	- 看书
	- 看电影
	

pom.xml

<!--java mail 依赖-->
<dependency>
	<groupId>org.eclipse.angus</groupId>
	<artifactId>jakarta.mail</artifactId>
</dependency>
  • 三方技术配置信息(配置)

  • 自定义配置信息(配置+获取)

SpringBoot整合MyBatis-不需声明Bean对象


spring整合myBatis

整合mybatis

<!--pom.xml-->
<!--mysql驱动依赖-->
<dependency>
	<groupId>com.mysql</groupId>
	<artifactId>mysql-connector-j</artifactId>
</dependency>

<!--mybatis起步依赖-->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>3.0.3</version>
    
</dependency>

配置数据源

# application.yml
# 只需配置,读取交给springboot
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis
    username: root
    password: sqx123

poji内编写实体类;

mapper内编写数据访问接口;

service内编写接口,声明mapper中方法,编写接口的实现类并重写方法;

controller内调用service层的接口来控制业务流程。

Mapper层和DAO层对比:

Mapper 层和 DAO(Data Access Object)层是在持久层中用于处理数据访问的两个概念。虽然这两者的目的都是用于访问数据库,但它们之间有一些区别。在Java开发中,这两个概念通常与MyBatis(或其他ORM框架)结合使用。

Mapper层:

定义

  • Mapper 是 MyBatis 中的一个术语,指的是用于描述如何映射数据库中的数据到 Java 对象的接口。每一个 Mapper 接口对应一个数据操作接口。

职责

  • 定义了数据访问的接口,提供了一组数据库操作的方法。
  • 包含了与具体数据访问有关的 SQL 语句和映射规则。

注解

  • 通常使用 MyBatis 的注解或 XML 文件来描述 SQL 映射。

DAO层:

定义

  • DAO 是一个更通用的设计模式,用于封装与数据存储交互的逻辑。在Java中,通常指的是数据访问对象。

职责

  • 提供了一个抽象接口,定义了数据访问的方法。
  • 包含了数据访问的具体实现,可以是直接对数据库进行操作,也可以通过调用其他服务、API等方式进行数据访问。

注解

  • 通常不涉及注解,而是通过实现接口的方式来定义数据访问方法。

对比

技术栈

  • Mapper 通常与 MyBatis 等 ORM 框架结合使用。
  • DAO 是一个更通用的概念,可以用于任何形式的数据访问,包括直接 JDBC 操作、使用 ORM 框架、调用 RESTful API 等。

灵活性

  • Mapper 更侧重于数据映射和 SQL 操作,通常会与具体的 ORM 框架绑定。
  • DAO 层相对更加抽象,可以在不同的数据访问技术之间切换,提供更大的灵活性。

命名规范

  • Mapper 接口方法通常直接与 SQL 语句对应,方法名和 SQL 语句之间的映射关系更为直观。
  • DAO 接口方法可以根据业务逻辑进行更灵活的命名,而不受 SQL 语句的限制。

在实际项目中,Mapper 层和 DAO 层有时会交替使用或者同时存在,具体的选择会根据项目的需求、技术栈和团队的开发习惯而定。在使用 MyBatis 等 ORM 框架时,常常使用 Mapper 来定义数据库操作接口。

// MyBatis Mapper 接口
public interface UserMapper {
    @Select("select * from user where id = #{id}")
    public User findById(Integer id);

    @Insert("insert into user (name, age) values (#{name}, #{age})")
    void insertUser(User user);
}

// DAO 接口
public interface UserDao {
    public User findById(Integer id);
    void insertUser(User user);
}
// DAO 实现
public class UserDaoImpl implements UserDao {
    // 数据库操作的具体实现
}

Bean管理(第三方的Bean管理)

Bean扫描

Spring中:

  • xml标签:<context:component-scan base-package=”com.nusqx/“>

  • 配置类注解:@ComponentScan(basePackages=”com.nusqx”)

SpringBoot中:使用@SpringBootApplication


SpringBoot启动类组合注解

SpringBoot默认扫描启动类所在的包及其子包。

也可以通过手动添加@ComponentScan(basePackages = {"com.nusqx"})指定扫描的包。

Bean注册


Bean注册

如果要注册的bean对象来自第三方(不是自定义的),是无法用@Component及衍生注解声明bean的。

因而Spring提供了第三方bean对象管理注解

  • @Bean

    如果要注册第三方bean,建议在配置类中集中注册


    @Bean

    在config包下使用@Bean
  • @Import

    • 导入配置类

    • 导入 ImportSelector 接口实现类


      @Import
    • @EnableXxxx注解,封装@Import注解

注册条件

SpringBoot提供了设置注册生效条件的注解@Conditional及衍生注解


@Conditional常用衍生注解

自动配置原理

  • 公共组件自定义成starter

  • 面试

遵循约定大于配置原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器。


原理

自动配置-源码分析

.imports配置文件是核心,springboot2.7以前使用的是spring.factories

简述:

在主启动类上添加了SpringBootApplication注解,这个注解组合了EnableAutoConfiguration注解(开启了自动配置);

EnableAutoConfiguration注解又组合了Import注解,导入了AutoConfigurationImportSelector类;

AutoConfigurationImportSelector实现了selectImports方法,这个方法经过层层调用,最终会读取META-INF目录下的后缀名为imports的文件,boot2.7以前的版本,读取的是spring.factories文件,2.7-3.0之间两者兼容,3.0之后只支持imports。

读取到全类名了之后,会解析注册条件,也就是@Conditional及其衍生注解,把满足注册条件的Bean对象自动注入到IOC容器中。

自定义starter

在实际开发中,经常会自定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot的starter。

  • Xxxx-autoconfiguration 自动配置功能
  • Xxxx-starter 依赖管理功能,并引入自动配置模块

以自定义mybatis的starter为例,


自定义mybatis
pom.xml
<dependency>
    <groupId>com.nusqx</groupId>
    <artifactId>dmybatis-spring-boot-autoconfigure</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

生产环境

IDEA2024.1.4 + maven3.9.5 + JDK17 + SpringBoot3.3.1 + MyBatis起步依赖3.0.3

当使用MyBatis3.0.0时会遇到问题😡

IDEA设置新建项目使用本地的maven而不需要重新下载

https://developer.baidu.com/article/details/2785547


新建项目设置

新建项目maven设置

测试工具:Apifox或Postman

对比参考文章:https://apifox.com/apiskills/apifox-postman-comparison/

Apifox:https://apifox.com/help/

Postman:https://postman.org.cn/


文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录