首页 > 其他分享 >Springboot从入门到精通

Springboot从入门到精通

时间:2022-09-30 00:33:19浏览次数:50  
标签:精通 SpringBoot boot 入门 name application Springboot starter 属性

SpringBoot创建

SpringBoot有两种创建方法,一种是在IDEA中创建,一种是在Spring官网创建,两种方法是一样的,但是需要联网。

SpringBoot项目快速启动

1.对SpringBoot项目打包(执行Maven构建指令package)

2.执行启动指令

java -jar springboot.jar

SpringBoot概述

  • 起步依赖

pom中的starter-parent和starterweb帮助我们实现快速配置。

  • starter

    • SpringBoot中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
  • parent

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

    • spring-boot-starter-parent (2.5.0)与spring-boot-starter-parent (2.4.6)共计57处坐标版本不同

  • 实际开发

    • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供如发生坐标错误,再指定version(要小心版本冲突)

将boot中的tomcat替换为jetty

使用maven依赖管理变更起步依赖项

<dependencies>
    <dependency>
        <groupid>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!--web起步依赖环境中,排除Tomcat起步依赖-->
        <exclusions>
            <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</ artifactId></exclusion>
        </exclusions>
        </dependency>
<!--添加Jetty起步依赖,版本由SpringBoot的starter控制-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty

SpringBoot配置文件

SpringBoot提供了多种属性配置方式,开发主要用yml

  • application.properties

server.port=80

  • application.yml

server:
port: 81

  • application.yaml

server:
port: 82

SpringBoot配置文件加载顺序(了解):
application.properties >application.yml > application.yaml

SpringBoot核心配置文件名为application
SpringBoot内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性

yaml

yaml语法规则

  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • 表示注释

  • 核心规则︰数据前面要加空格与冒号隔开

enterprise:
 name : itcast
 age: 16
 tel: 4006184000

yaml数据读取

单个数据读取

  • 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名....}

2022-09-10-11-06-40..png

如果需要在配置文件中使用变量进行引用,可以通过${变量名}进行引用:

baseDir: /usr/ local/fire
center:
 dataDir: ${baseDir}/data
 tmpDir: ${baseDir}/tmp
 logDir: ${baseDir}/log
 msgDir: ${baseDir}/msgDir

属性值中如果出现转义字符,需要使用双引号包裹

lesson: "Spring\tboot\nlesson"

全部数据读取

如果需要一次性全部读取呢?则可以使用:

@Autowired
private Environment env;
  • 封装全部数据到Environment对象

2022-09-10-11-07-28..png

某个属性读取

自定义类型的属性要和配置文件名一一对应,比如name就是name,另外需要加入@ConfigurationProperties注解,此时如果在Controller调用就会直接读取到对应的数据。

图片.png

多环境启动

2022-09-10-11-12-42..png

2022-09-10-11-13-07..png

多环境启动命令行

2022-09-10-11-17-35..png

SpringBoot中4级配置文件

1级: file : config/application.yml 【最高】
2级: file : application.yml
3级: classpath: config/ application. yml
4级: classpath: application.yml【最低】
作用:
1级与2级留做系统打包后设置通用属性
3级与4级用于系统开发阶段设置通用属性

整合Junit

1.导入测试对应的starter
2.测试类使用@SpringBootTest修饰
3.使用自动装配的形式添加要测试的对象

@SpringBootTest
class Springboot07JunitApplicationTests{
    @Autowired
    private BookService bookService;
    
    @Test
    public void testSave(){
        bookService.save();
    }
}

SpringBootTest中的class属性,是用来设置JUnit加载的SpringBoot启动类,如果测试类和对应的类不在同一个包名下,那么需要手动在注解后面加入class属性告诉spring启动类在哪里,反之,如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定。

@SpringBootTest(classes = Springboot05JunitApplication.class)
class Springboot07UnitApplicationTests{

}

整合mybatis

1.初始化的时候,选择当前模块需要使用的技术集(MyBatisFramework、MySQL驱动)

2.在yml文件中,设置数据源

spring:
 datasource:
  type: com.alibaba.druid.pool.DruidDataSource
  driver-class-name: com.mysq1.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/ssm_dbuser
  name: root
  password: root

3.定义数据层接口与映射配置

@Mapper
public interface UserDao {
    @select("select * from user")
    public List<User> getA1l();
}

另外,在MySQL8版本中可能会出现要求设置时区,此时可以在上面的配置文件中加入?serverTimezone=UTC,即jdbc:mysql://localhost:3306/ssm_dbuser?serverTimezone=UTC

整合mybatis-plus

  1. 通过阿里云可以直接在勾选界面直接选中mybatis-plus,如果从官网中是无法选择mp的,此时可以通过pom手动添加。
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>
  1. 如果数据库表名和实体类不一致,例如数据库中是tbl_book,而实体类是book,此时需要在配置文件中加入mp配置:
mybatis-plus:
 global-config:
   db-config:
    table-prefix:tbl_
  1. 在bookdao中extends下basemapper 加上@mapper注解

整合druid

  1. 导入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.12</version>
</dependency>
  1. 变更Druid的配置方式:
spring:
 datasource:
  druid:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTCuser
   name: root
   password: root

Springboot整合之前的ssm

  1. pom. xml
    配置起步依赖,必要的资源坐标( druid)

  2. application.yml
    设置数据源、端口等

  3. 配置类
    全部删除

  4. dao
    设置@Mapper

  5. 测试类

  6. 页面

mp部分功能介绍

  1. 插入默认不适用雪花算法怎么修改为自增策略?

在application.yml中设置id-type属性:

mybatis-plus:
 global-config:
  db-config:
   table-prefix: tbl_
   id-type: auto
  1. 如何开启mp的日志?

    同样在配置文件中修改:

mybatis-plus:
 configuration: 
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. 如何开启mp的分页功能?

3.1 添加mp分页拦截器,在config包下新建类

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }

3.2 设定分页对象ipage

@Test
void testGetPage(){
  IPage page = new Page(1,5);
  bookDao. selectPage(page,null);
}

IPage对象中封装了分页操作中的所有数据

1.  数据

2.  当前页码值

3.  每页数据总量

4.  最大页码值

5.  数据总量
  1. 使用mp条件查询功能
  • 使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用
@Test
void testGetByCondition(){
	IPage page = new Page(1,10);
	LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
	lqw.like(Book::getName,"Spring");
	bookDao.selectPage(page,lqw);
}

为什么不推荐querywapper?因为有可能在写参数名时出错,而使用上面的lambda表达式就可以完美避开出错可能。

@Test
void testGetByCondition(){
	QueryWrapper<Book> qw = new QueryWrapper<Book>();
	qw.like("name","Spring");
	bookDao.selectList(qw);
}

上面的querywapper写法不推荐,同时支持动态条件查询,例如:

@Test
void testGetByCondition(){
	String name = "Spring";
	IPage page = new Page(1,10);
	LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
	lqw.like(Strings.isNotEmpty(name),Book::getName,"Spring");
	bookDao.selectPage(page,lqw);
}

标签:精通,SpringBoot,boot,入门,name,application,Springboot,starter,属性
From: https://www.cnblogs.com/monsterwolf/p/16743578.html

相关文章