SpringBoot学习笔记

SpringBoot

Author:Yu

Version:2.2.11

一.SpringBoot介绍

1.1引言

  • 为了使用SSM框架去开发,准备SSM框架的模板配置
  • 为了Spring整合第三方框架,单独的去编写xml文件。
  • 导致SSM项目后期xml文件特别多,维护xml文件是很高的。
  • SSM工程部署也是很麻烦,依赖第三方的容器。
  • SSM开发方式很笨重。

1.2SpringBoot介绍

SpringBoot是由Pivot团队研发的,SpringBoot并不是一门新技术,只是将之前常用的spring,SpringMVC,data-jpa等常用框架封装到了一起,帮助你隐藏的整合细节,实现快速开发。

SpringBoot就是一个工具。

SpringBoot特点:

  • SpringBoot项目不需要模板化的配置。
  • SpringBoot整合第三方框架时,只需要导入相应的start依赖包,就自动整合了。
  • SpringBoot只有一个默认的.properties的配置文件,不推荐使用xml,后期会采用.java的文件去编写配置信息。
  • SpringBoot工程在部署时,就采用jar包的方式,内部自动依赖Tomcat容器,提供多环境的配置。
  • 学习微服务SpringCloud要建立在SpringBoot的基础上。

二.SpringBoot快速入门

2.1快速构建SpringBoot

1.选择项目的类型

2.项目的描述

3.指定SpringBoot项目的版本和依赖

4.第一次创建SpringBoot工程,下载大量依赖,保证maven已经配置好了阿里云的私服

修改pom.xml文件中的依赖

<!-- 导入下面的依赖 -->
<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
</dependency>

5.编写Controller类

@RestController
public class TestController {
    @GetMapping("/test")
    public String test(){
        return "Hello SpringBoot!";
    }
}

6.启动Spring Boot工程,运行主线程的main方法

得到 Hello SpringBoot! 界面

2.2 Spring Boot的目录结构

1.pom.文件

​ 1.指定了一个父工程:指定当前项目为Spring Boot,帮助我们声明starter依赖的版本。

​ 2.项目的元数据:包名项目号,版本号。

​ 3.指定properties信息:指定Java版本为1.8

​ 4.导入依赖:默认情况导入spring -boot-starter,spring-boot-starter-test

​ 5.插件:spring-boot-maven-plugin


.gitignore文件:默认帮我们忽略了一些文件和目录


3.src目录

-src
	-main
		-java
			-包名
				启动类.java    #需要controller类,放在启动类的子包中或者同级别包下
		-resources
    		-static          #存放静态资源的
    		-templates		#存放模板页面的
    		application.properties #提供的唯一配置文件
		
	-test   #只是为了测试用的

2.3 SpringBoot 三种启动方式

1,运行启动类的main方法即可运行Spring Boot工程


2.采用maven的命令去运行Spring Boot工程

mvn spring-boot:run


3.采用jar包的方式运行

  • 将当前项目打包成一个jar文件
  • 通过java-jar jar文件

三.SpringBoot常用注解

3.1@Configuration和@Bean

之前使用SSM去开发时,在xml文件中编写bean标签。

但是Spring Boot不推荐使用xml文件。

@Configuration注解相当于bean标签

@Bean注解相当于bean标签

id=“方法名|注解中的name属性(优先级更高)“

class=“方法返回的结果”

@Configuration   //代表当前是配置类

public class UserConfig {


    @Bean(name = "user1")       //构建一个实例 ,放到spring容器中
        public User user(){
        User user = new User();
        user.setId(1);
        user.setName("张三");
        return user;

        /*
        user 就是id  User就是class
        * <beans...>
                    <bean id="user1" class="  com.yu.firstspringboot.entity.User;"/>
           </beans>
           * */
    }
 }   

3.2@SpringBootApplication

@SpringBootApplication就是一个组合注解


1.@SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。


2.@EnableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。

好处:无需编写大量的整合配置信息,只需要安卓SpringBoot提供好了的约定方式去整合即可。

坏处:如果你导入了一个start依赖,那么你需要他必要的配置信息。

手动关闭自动装配指定内容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class)


3.@ComponentScan就相当于<context:component-scan basePackage="包名"/>帮助注解扫描的。

四.SpringBoot常用配置

4.1SpringBoot的配置文件格式

SpringBoot的配置文件支持properties和yml,甚至他还指出json

更推荐使用yml文件格式:

​ 1.yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置。

​ 2.yml文件,相比properties更轻量级一些

yml文件的劣势:

​ 1.严格遵循换行和缩进。

​ 2.在填写value时,一定要在:后面空格

4.2多环境配置

在application.yml文件中添加一个配置选项:

spring:
profiles:
 active: 环境名

在resource目录下,创建多个application-环境名.yml 文件即可


在部署工程时,通过Java -jar jar文件 --spring.profiles.active=环境

4.3引入外部配置文件信息

和传统的SSM方法一样,通过@Value的注解去获取properties/yml文件的内容。

如果yml文件中需要编写大量的自定义配置,并且具有统一的前缀时,采用如下方式


@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
    private String xxxx;
    
    ...

}
aliyun:
  xxxx: xxxxxxxxxx
  ...    

4.4热加载

1.导入依赖

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
</dependency>

2.修改settings中的配置

3.修改内容后,可以通过build重新构建工程

五.SpringBoot整合Mybatis

5.1xml方式整合Mybatis

1.导入依赖

	<!--mysql驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!--druid连接-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.10</version>
		</dependency>
		<!--mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

2.编写配置文件。

准备实体类
@Data
public class Air implements Serializable {
    private Integer id;
    private Integer districtId;
    private java.util.Date monitorTime;
    private Integer pm10;
    private Integer pm25;
    private String monitoringStation;
    private java.util.Date  lastModifyTime;
}

//==========================
@Data
public class District implements Serializable {
    private Integer id;
    private String name;
}

2.2//准备Mapper接口
public interface AirMapper {
    List<Air>    findAll();
}
//在启动类添加扫描Mapper接口所在的包
@MapperScan(basePackages = "com.yu.firstspringboot.mapper")


<!--2.3准备映射文件-->
<?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.yu.firstspringboot.mapper.AirMapper">
    <!--    LIst<Air> findAll();    -->
    <select id="findAll" resultType="Air">
        select *from air
    </select>
</mapper>
<!--添加yml文件配置信息 -->
#mybatis配置
mybatis:
扫描映射文件
  mapper-locations: classpath:mapper/*.xml
  配置别名扫描的包
  type-aliases-package: com.yu.firstspringboot.entity
  configuration:
  开启驼峰映射配置
    map-underscore-to-camel-case: true

#2.3指定连接数据库的信息
#连接数据库信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///air?serverTimezone=UTC
    username:  root
    password:  123456
    type: com.alibaba.druid.pool.DruidDataSource

3.测试。

在Mapper接口的位置,直接右键转到测试类,在test目录下。

让当前测试类,继承FirstSpringbootApplicationTests测试类(在class前,添加public).

class AirMapperTest extends FirstSpringbootApplicationTests {

    @Autowired
    private AirMapper airMapper;
    @Test
    void findAll() {
        List<Air> list = airMapper.findAll();
        for (Air air : list) {
            System.out.println(air);
        }
    }

5.2注解方式 整合Mybatis

1.创建District和Mapper接口

public interface DistrictMapper {
    List<District> findAll();
}

2.添加Mybatis注解

针对增删改查:@Insert,@Delete,@Update,@Select

需要在启动类添加@MapperScan注解

@Select("select *from district")
List<District> findAll();

@Select("select *from district where id = #{id}")
District findByOneById(@Param("id") Integer id);

3.测试,看到执行的sql语句

logging:
  level:
    com.yu.firstspringboot.mapper: DEBUG

class DistrictMapperTest extends FirstSpringbootApplicationTests {

    @Autowired
    private DistrictMapper mapper;
    @Test
    void findAll() {
        List<District> list = mapper.findAll();
        for (District district : list) {
            System.out.println(district);
        }
    }

    @Test
    void findByOneById() {
        District district = mapper.findByOneById(5);
        System.out.println(district);
    }
}

5.3SpringBoot 整合分页助手

1.导入依赖

<!--PageHelper依赖-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

class AirMapperTest extends FirstSpringbootApplicationTests {

    @Autowired
    private AirMapper airMapper;
    @Test
    void findAll() {
        List<Air> list = airMapper.findAll();
        for (Air air : list) {
            System.out.println(air);
        }
    }
    @Test
    void findByPage() {
        //1.执行分页
        PageHelper.startPage(1, 5);
        //2.执行查询
        List<Air> list = airMapper.findAll();
        //3.执行PageInfo封装
        PageInfo<Air> pageInfo = new PageInfo<>(list);
        //4.输出
        for (Air air : pageInfo.getList()) {
            System.out.println(air);
        }
    }
}

六.SpringBoot整合JSP

1.导入依赖

<!--JSP核心引擎依赖-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<!--JSTL-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

2.创建webapp以及WEB-INF去存放JSP页面

3.指定view前缀和后缀

public class JspController {
    @GetMapping("/index")
    public String index(Model model){
        model.addAttribute("name","张三");
        return "index";
    }
}

spring:
  mvc:
      view:
        prefix: /WEB-INF
        suffix: .jsp
posted @ 2020-11-01 23:23  Anthony-bird  阅读(119)  评论(0编辑  收藏  举报