关闭页面特效

SpringBoot

1|0SpringBoot


1|1概述


SpringBoot是搭建spring应用的脚手架,可以迅速的搭建一个spring应用,是一个工具,而非框架。

解决问题:

复杂的配置

混乱的依赖管理

1|2特点


  • 快速创建独立的Spring应用。
  • 提供固定的启动器依赖(启动器即Spring Boot提供的一个jar包)去简化组件配置,通过自己设置参数(.properties或.yml的配置文件),实现开箱即用(即快速使用)的效果
  • 只要你导入了某一个框架的启动器,那么该框架对应的依赖会全部自动导入
  • 提供了一些大型项目中常见的非功能性特性,如内嵌服务器(如tomcat、jetty、undertow)、安全、指标,健康检测、外部化配置等

2|0搭建测试工程


image-20230706112359153

image-20230706112549535

image-20230706112627691

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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--1. 凡是springboot项目都必须要继承一个父模块--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- Generated by https://start.springboot.io --> <!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn --> <groupId>com.yxh</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>demo</description> <properties> <java.version>17</java.version> </properties> <dependencies> <!-- 2. 以后你需要使用哪个框架,那么就导入对应框架的启动器即可。 比如:springmvc - starter-web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </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> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>

启动类

package com.yxh.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // //表明是一个springboot应用 /* @SpringBootApplication这个注解的本质是有以下三个注解: 1.@Configuration【表示该类是一个配置类】 2.@EnableAutoConfiguration【开启自动装配, 根据导入的依赖来完成该框架的自动配置。】 ===springboot启动时会检测你导入了哪些框架的jar包,那么springboot就会给你完成哪些配置;例如springmvc(核心控制器,处理器映射器,处理器适配器,视图解析器的对象的创建)=== 3.@ComponentScan【默认扫描SpringbootNewApplication所在包以及子包下面所有使用了spring注解的类】 ===spring注解 ioc:@Controller @Service @Component @Repository DI:@Value @Autowired @Qualier AOP:@Transational @Before @After=== */ //springboot启动类 @SpringBootApplication public class DemoApplication { //启动spring的容器,加载当前类上面的@SpringBootApplication注解 public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

image-20230706113054505

image-20230706113102134

image-20230706113118477

image-20230706113154426

image-20230706113231940

image-20230706113333192

3|0配置文件


application.properties

## 端口号 server.port=9090 ## 项目访问路径 server.servlet.context-path=/test

springboot在启动完成自动配置的时候会去读取application.properties文件,根据key值读取相应的value

3|1yml配置


  • YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式,YAML是一种层级树键值对格式文件,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
  • YML文件的扩展名可以使用.yml或者.yaml。
application.propertiesapplication.yml两个文件同时存在时,当属性名相同时application.properties中的属性会 覆盖 application.yml中的属性。 加载顺序: 1application.yml 2application.properties

application.yml

server: port: 9090 servlet: context-path: /test ## 如果需要自定义一些东西,只能写在application.yml或者application.properties中 ## 自己定义的属性和值,需要自己去读取 student: name: 张三 age: 18 sex:

读取自定义配置

@Data //spring注解 创建对象 @Component //spring 要把数据给到实体类的前提是:1.属性名要对上,2.属性必须要有setter方法 @ConfigurationProperties(prefix="student") public class User implements Serializable{ private String name; private String sex; private Integer age; }

或者

@Data @Component public class Student implements Serializable{ @Value("${student.name}") private String name; @Value("${student.sex}") private String sex; @Value("${student.age}") private Integer age; }

!!不支持注入复杂数据类型

4|0集成mybatis


1.导入依赖

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.8.RELEASE</version> </parent> <dependencies> <!--springmvc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--myabtis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

2.配置yml

server: port: 8081 servlet: context-path: /test ## 配置数据源 spring: datasource: username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/medical?useSSL=false ## 映射文件/包名 mybatis: mapper-locations: - classpath:mapper/*.xml type-aliases-package: com.yxh.springboot_create_ssm.entity configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ## 记录日志

3.编写实体类

4.编写mapper

接口上加@Mapper或者在Application.java上加@MapperScan(basePackages = "com.yxh.springboot.dao")

5|0静态资源访问


image-20230707091453057

image-20230707091501063

image-20230707091509340

默认的静态资源访问路径有四个:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public

第二步: 创建静态资源存储目录

我们习惯会把静态资源放在classpath:/static/目录下。拷贝"资料"文件夹目录下的test.jpg与test.js

image-20230711083600443

重启项目后访问

image-20230711083620864

6|0拦截器的使用


思考: 拦截器也是我们经常需要使用的,在SpringBoot中该如何添加呢?

实现步骤

6|1第一步


  • 第一步: 自定义拦截器实现HandlerInterceptor接口

    src\main\java\cn\itcast\interceptor\LoginInterceptor.java:

    package com.tyhxzy.interceptor; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class Demo1Interceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("【前置通知】"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("【后置通知】"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("【最终通知】"); } }

6|2第二步


  • 第二步: 自定义配置类实现WebMvcConfigurer接口,注册拦截器

    src\main\java\cn\itcast\configuration\MvcConfiguration.java

    package com.tyhxzy.config; import com.tyhxzy.interceptor.Demo1Interceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Autowired private Demo1Interceptor demo1Interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(demo1Interceptor).addPathPatterns("/log"); } }

    运行结果:

    image-20230711083747277

7|0SpringBoot:整合Mybatis


整合步骤

引入mybatis启动器依赖(它依赖了jdbc启动器,jdbc启动器可以删除)

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.8.RELEASE</version> </parent> <dependencies> <!--springmvc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--myabtis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

配置mybatis相关属性

spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql:///springdb?useSSL=false username: root password: root mybatis: #别名扫描 type-aliases-package: com.tyhxzy.model #开启下划线与小驼峰映射 configuration: map-underscore-to-camel-case: true #打印sql的日志信息 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定Mapper文件所在的位置 ,一旦指定不需要mapper.xml文件与类名同一个包文件名也可以不一样的。 mapper-locations: #注意: classpath后面的:是没有空格的, - classpath:mappers/*.xml

用户实体(User)

package com.tyhxzy.model; import lombok.Data; @Data public class User { private Long id; //id private String username; //用户名 private String password; //密码 private Integer age; //年龄 private String email; //邮箱 private Integer sex; //性别 }

数据访问接口(UserMapper)

  • 方式一 (@Mapper注解)

  • package com.tyhxzy.dao; import com.tyhxzy.model.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserDao { public List<User> findAll(); }

    方式二 (@MapperScan注解)【推荐】

    package com.tyhxzy.dao; import com.tyhxzy.model.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserDao { public List<User> findAll(); }

    在启动类上添加数据访问接口包扫描:

    package com.tyhxzy; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 注意: 使用mybatis的时候,这个springboot默认是不扫描dao接口的,两种解决方案: * 1. 每一个dao接口都添加一个@mapper注解,不推荐,因为较为繁琐 * 2. 在启动类中@MapperScan注解扫描dao包 */ @SpringBootApplication @MapperScan(basePackages = "com.tyhxzy.dao") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
    • 说明: 这种方式的好处是,不用给每一个Mapper都添加注解。采用@MapperScan包扫描方式只需要添加一次注解。

    • 定义SQL语句(UserMapper.xml)

    • <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.tyhxzy.dao.UserDao"> <select id="findAll" resultType="user"> select * from tb_user </select> </mapper>

      业务层 (UserService)

      package com.tyhxzy.service; import com.tyhxzy.model.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserService { public List<User> findAll(); }
      package com.tyhxzy.service.impl; import com.tyhxzy.dao.UserDao; import com.tyhxzy.model.User; import com.tyhxzy.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public List<User> findAll() { List<User> userList = userDao.findAll(); return userList; } }

      控制器 (UserController)

      package com.tyhxzy.controller; import com.tyhxzy.model.User; import com.tyhxzy.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/findAll") public List<User> findAll(){ return userService.findAll(); } }

运行测试

image-20230711084218047

小结

  • 说出以下配置文件的意思
mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 日志输出 map-underscore-to-camel-case: true 开启下划线与小驼峰映射 mapper-locations: - classpath:mappers/*.xml mapper文件路径 type-aliases-package: cn.itcast.model 别名扫描

8|0SpringBoot:整合Junit


8|1整合步骤


  • 引入test启动器依赖

    <!-- 配置test启动器(自动整合spring-test、junit) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
  • 编写测试类 (UserServiceTest)

    package com.tyhxzy.test; import com.tyhxzy.MybatisApplication; import com.tyhxzy.domain.User; import com.tyhxzy.service.UserService; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; /* 注意: 测试类如果与启动类不在同一级包或者是启动类子包,必须要指定启动类所在的位置 例子: @SpringBootTest(classes = MybatisApplication.class) */ @SpringBootTest public class MybatisTest { @Autowired private UserService userService; @Test public void test01(){ List<User> userList = userService.findAll(); System.out.println("用户列表:"+userList); } }
  • 使用junit的步骤
    • 导入spring-boot-starter-test
    • 编写一个测试类,类上使用@SpringBootTest注解

9|0SpringBoot:项目打包部署


打成Jar包

  • 需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中,可以使用maven的package
  • 运行: java -jar xxx(jar包名)

操作步骤

  • 第一步: 引入Spring Boot打包插件

    <!--打包的插件--> <build> <!--修改jar的名字--> <finalName>ROOT</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
  • 第二步: 执行命令

    # 清理、打包 跳过测试 mvn clean package -Dmaven.test.skip=true
  • 第三步: 运行

    java -jar xxx.jar
  • 第四步: 浏览器访问 http://localhost:8080/findAll

打包jar的步骤

  • 在pom文件添加打包的插件
    • 在控制台进入到模块里面执行 mvn clean package -Dmaven.test.skip=true
      • 执行jar java -jar xxx.jar

10|0SpringBoot :profile配置


我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

1) profile是用来完成不同环境下,配置动态切换功能的。

2) profile配置方式

  • 多profile文件方式:提供多个配置文件,每种文件代表一种环境。

    • application-dev.properties/yml开发环境

    • application-test.properties|yml测试环境

    • application-pro.properties|yml生产环境

  • 一个yml文件配置多环境方式:

    • 在yml中使用 --- 分隔不同配置

3) profile激活方式

  • 配置文件: 再配置文件中配置:spring.profiles.active=dev

  • 虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev

  • 命令行参数:java –jar xxx.jar --spring.profiles.active=dev

演示

多文件方式

1、准备项目环境:新建项目、依赖、启动类

2、新建配置文件

application-dev.properties

server.port=8082

application-test.properties

server.port=8083

application-pro.properties

server.port=8084

3、此时启动项目发现端口还是8080,因为没有激活配置。

4、新建application.properties,激活配置

spring.profiles.active=dev

此时,使用的就是application-dev.properties配置文件的内容。

yml多文档

新建application.yml

--- server: port: 8082 spring: profiles: dev --- server: port: 8083 spring: profiles: test --- server: port: 8084 spring: profiles: pro --- # 激活配置 spring: profiles: active: test

虚拟机参数

方式1: VM Options 参数:

image-20230711084649978

方式2:Program arguments:

image-20230711084704330

命令行参数

E:\>java -jar springboot-profile-1.0-SNAPSHOT.jar --spring.profiles.active=test
  • profile文件的作用,有几种方式
    • profile: 配置多环境的
      • 多个properties文件
      • 一个yml文件使用---分割

__EOF__

作  者YXH
出  处https://www.cnblogs.com/YxinHaaa/p/17533301.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   YxinHaaa  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示