SpringBoot学习笔记(springboot 教程)

  本篇文章为你整理了SpringBoot学习笔记(springboot 教程)的详细内容,包含有springboot系列教程 springboot 教程 springboot完整教程 springboot怎么学 SpringBoot学习笔记,希望能帮助你了解 SpringBoot学习笔记。

  父包 spring-boot-starter-parent 的版本手动更改为了 2.6.3,jdk版本1.8 与 spring boot 3.0.0 版本不匹配,会报错

   java.version 修改为了1.8

  


 ?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 https://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 2.6.3 /version

   relativePath/ !-- lookup parent from repository --

   /parent

   groupId priv.dandelion /groupId

   artifactId springboot_01_quickstart /artifactId

   version 0.0.1-SNAPSHOT /version

   properties

   java.version 1.8 /java.version

   /properties

   dependencies

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-test /artifactId

   scope test /scope

   /dependency

   /dependencies

   build

   plugins

   plugin

   groupId org.springframework.boot /groupId

   artifactId spring-boot-maven-plugin /artifactId

   /plugin

   /plugins

   /build

   /project

  

 

  
Spring 程序中的坐标需要自己编写,而且坐标非常多

  SpringBoot 程序中的坐标是我们在创建工程时进行勾选自动生成的

  
Spring 程序需要自己编写这个配置类。这个配置类大家之前编写过,肯定感觉很复杂

  SpringBoot 程序不需要我们自己书写

  
SpringBoot 程序服务器运行在本机

  当进行前后端联调时,按理说前端需要连接后端开发的机器,比较麻烦

  是否有更好的方式?

  
该 jar 包运行不依赖于 Tomcat 和 Idea也可以正常运行

  这个 jar 包在运行过程中连接和我们自己程序相同的 Mysql 数据库即可

  
groupId org.springframework.boot /groupId

   artifactId spring-boot-maven-plugin /artifactId

   /plugin

  

 

 

  
如果配置文件中包含中文,最好在设置中设置编码为 UTF-8 并重新检查配置文件中的中文,避免出现乱码问题导致配置文件无法使用,具体操作如下

  
进入 jar 包所在目录,使用 cmd 输入命令

  

java -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar

 

  

 

  
自动配置。这个是用来解决 Spring 程序配置繁琐的问题

  起步依赖。这个是用来解决 Spring 程序依赖设置繁琐的问题

  辅助功能(内置服务器,...)。在启动 SpringBoot 程序时既没有使用本地的 tomcat 也没有使用 tomcat 插件,而是使用 SpringBoot 内置的服务器。

  
使用 Spring Initializr 方式创建的 Maven 工程的的 pom.xml 配置文件中自动生成了很多包含 starter 的依赖,这些以来就是启动依赖,如下

  

 parent 

 

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-parent /artifactId

   version 2.7.8 /version

   /parent

   !--

   ...

   dependencies

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-test /artifactId

   scope test /scope

   /dependency

   /dependencies

  

 

  
进入 spring-boot-starter-parent 的父工程 spring-boot-dependencies 中,其中包含:

   properties... 标签中定义了各个技术软件依赖的版本,避免了我们在使用不同软件技术时考虑版本的兼容问题。在 properties 中可以找到各种技术的版本。

   dependencyManagement... 标签是进行依赖版本锁定,但是并没有导入对应的依赖;如果我们工程需要那个依赖只需要引入依赖的 groupid 和 artifactId 不需要定义 version。

   build... 标签中对插件的版本进行了锁定

  
groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

  

 

 

  
引入了 spring-web 和 spring-webmvc 的依赖,这就是为什么我们的工程中没有依赖这两个包还能正常使用 springMVC 中的注解的原因。

  而依赖 spring-boot-starter-tomcat ,从名字基本能确认内部依赖了 tomcat,所以我们的工程才能正常启动。

  
groupId org.springframework.boot /groupId

   artifactId spring-boot-starter /artifactId

   version 2.7.8 /version

   scope compile /scope

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-json /artifactId

   version 2.7.8 /version

   scope compile /scope

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-tomcat /artifactId

   version 2.7.8 /version

   scope compile /scope

   /dependency

   dependency

   groupId org.springframework /groupId

   artifactId spring-web /artifactId

   version 5.3.25 /version

   scope compile /scope

   /dependency

   dependency

   groupId org.springframework /groupId

   artifactId spring-webmvc /artifactId

   version 5.3.25 /version

   scope compile /scope

   /dependency

   /dependencies

  

 

 

  
所有 SpringBoot 项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的

  
public static void main(String[] args) {

   SpringApplication.run(Springboot01QuickstartApplication.class, args);

  

 

 

  
SpringBoot 在创建项目时,采用 jar 的打包方式

  SpringBoot 的引导类是项目的入口,运行 main 方法就可以启动项目

  因为 pom.xml 中配置了 spring-boot-starter-web 依赖,而该依赖中依赖 tomcat ,所以运行 main 方法就可以使用 tomcat 启动工程。

  
groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   exclusions

   exclusion

   artifactId spring-boot-starter-tomcat /artifactId

   groupId org.springframework.boot /groupId

   /exclusion

   /exclusions

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-jetty /artifactId

   /dependency

  

 

 

  
当三种配置文件均存在时,优先级application.properties application.yml application.yaml

  SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同

  
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键),空格的个数并不重要,只要保证同层级的左侧对齐即可。

  
直接使用 @Value("${ }") 注解进行注入,用于读取单个数据,参数为${ }包裹的数据名称的字符串

  
用于获取全部数据,使用时对Environment类型的属性进行自动装配,使用其getProperty()方法来获取数据

  
System.out.println(environment.getProperty("lesson"));

   System.out.println(environment.getProperty("server.port"));

   System.out.println(environment.getProperty("enterprise.age"));

   System.out.println(environment.getProperty("enterprise.subject[1]"));

   return "hello boot!";

  

 

 

  
该方式用于读取任意数据,将其封装为实体类,使用注解绑定获取数据的范围,在获取时,通过自动注入获取该实体类对象并进行操作

  
后续要使用自动装配,故要添加 @Component 注解,将这个类交给 Spring 管理

  使用@ConfigurationProperties(prefix = "enterprise")注解,prefix 属性值表示读取配置文件的哪一部分数据,此处代表读取 enterprise中的数据

  
简单书写部分中,设定环境的名称的spring.profiles的书写格式并不规范,规范的书写格式如下

  

#开发环境

 

  spring:

   config:

   activate:

   on-profile: dev

  server:

   port: 80

  

 

  
与 yaml 文件不同,properties 的多环境配置写在不同的文件中,并在主配置文件中指定使用的环境

  多个环境使用文件名进行区分和定义,application-环境名.properties

  公用的配置可以写application.properties中

  
可以在启动指令后添加参数来临时覆盖配置文件中的内容,参数可以有多个,每一个参数的格式为-- 空格 使用.连接的配置属性名称=属性值,如下

  

java -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar -- spring.profiles.active=test -- server.port=88

 

  

 

  
由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,可能参数过多,过于复杂

  
classpath 指的是项目的 resources 目录下,file 指的是打好的 jar 包所在的目录下

  file 中的配置文件一般用于系统打包后临时设置通用属性,classpath 中的配置文件一般用于开发阶段设置通用属性

  file 中的配置文件的优先级高于 classpath 中的配置文件

  同一分类的配置中,config 文件夹中的配置文件的优先级高于 config文件夹外的配置文件

  
如果测试类和引导类的包名不一致,需要为@SpringBootTest 的 class 属性手动指定引导类的字节码对象,如@SpringBootTest(classes = Springboot02TestApplication.class)

  

@SpringBootTest

 

  class Springboot02TestApplicationTests {

   @Autowired

   private BookService bookService;

   @Test

   void contextLoads() {

   bookService.save();

  

 

  


Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type priv.dandelion.dao.BookDao available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

 

   at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801) ~[spring-beans-5.3.25.jar:5.3.25]

   at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357) ~[spring-beans-5.3.25.jar:5.3.25]

   at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.25.jar:5.3.25]

   at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.25.jar:5.3.25]

   ... 74 common frames omitted

  

 

  
Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口

  注意:Mysql驱动版本大于8.0时,需要在url连接串中配置时区 jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC,或在MySQL数据库端配置时区解决此问题

  
@Insert("insert into tbl_book values(null,#{type},#{name},#{description})")

   // @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")

   public int save(Book book);

   @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")

   public int update(Book book);

   @Delete("delete from tbl_book where id = #{id}")

   public int delete(Integer id);

   @Select("select * from tbl_book where id = #{id}")

   public Book getById(Integer id);

   @Select("select * from tbl_book")

   public List Book getAll();

  

 

 

  
测试类,使用了 @SpringBootTest 注解,更换了使用的包

  

// import org.junit.Test;

 

  import org.junit.jupiter.api.Test;

  // import ...

  
//@RunWith(SpringJUnit4ClassRunner.class)

  //@ContextConfiguration(classes = SpringConfig.class)

  // TODO 将原先使用的注解更改为 @SpringBootTest

  @SpringBootTest

  public class BookServiceTest {

   @Autowired

   private BookService bookService;

   // TODO 原先使用的 @Test 注解 现在需要重新导包

   @Test

   public void testGetById() {

   Book byId = bookService.getById(1);

   System.out.println(byId);

   @Test

   public void testGetAll() {

   List Book all = bookService.getAll();

   System.out.println(all);

  

 

  
type: com.alibaba.druid.pool.DruidDataSource

   driver-class-name: com.mysql.cj.jdbc.Driver

   url: jdbc:mysql://localhost:3306/ssm_db

   username: root

   password: 123456

  

 

 

  5.4 静态资源

  
5.5 包结构展示

  5.6 其他问题

  若再未加入前端代码时启动过服务器,加入前端代码后无法正常访问到页面时

  执行 Maven 的 clean 指令,再重新启动服务器(重新打包)即可

  
SpringBoot 版本问题、MySQL时区问题、项目无法构建、配置文件打包乱码等问题,本节笔记中均有提及,可向上查阅

  以上就是SpringBoot学习笔记(springboot 教程)的详细内容,想要了解更多 SpringBoot学习笔记的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: