1、什么是springboot

  springboot属于spring的一个子项目,可以说是基于spring,主要是为了简化配置而诞生的一个解决方案框架,它可以利用引入starter而引入一组starter,从而简化了坐标的引入,同时简化配置使我们能更快速的专注单体程序(微服务)本身的开发。

2、springboot和spring及springCloud什么关系

  简单点可以说 springboot基于spring,而springCloud属于微服务治理,springCloud则又是基于springboot

3、初识springboot案例

  请参考 关于文中 :关于SpringBoot数据源的引入及第三方组件使用

4、springBoot自动配置类流程

  springboot在做自动配置的时候,它会扫描classpath下面所有的jar,从jar中加载到它的自动配置类,然后把这些自动配置类以bean的形式注入到Ioc容器之中,然后通过yml 属性配置文件进行属性注入。

5、属性注入(使用到的依赖 参考下文引入的相关依赖)

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.0.Final</version>
</dependency>

5.1) 属性校验需要使用到校验器(依赖包)
5.2) 需要在对应的类上增加 @Validated 属性上则科室使用 @NotNull、@Max、 @Min()、@NotEmpty 等等
5.3) 如果是(如:把B类作为A类的属性)内部类,或者外部类。则需要在属性上增加增加 @Valid ,并在内部属性、或者外部类 增加对应条控制 @NotNull、@Max、 @Min()、@NotEmpty 等等
5.4) 从配置文件yaml中属性绑定可以使用@ConfigurationProperties(jiac.name) 用于类上或者 @Value(“${jiac.age}”) 用于属性上,需要注意的是 @Value 不能用于从配置文件yaml中绑定复杂的数据类型

6、关于yaml中profile的用法

6.1)可以在yaml中使用 spring.peofiles.activ=test 启用
在这里插入图片描述
6.2)可以在主方法入口处通过参数配置 如 -Dspring.profiles.active=pro , -Dacme.enabled=false(用于覆盖配置文件中的属性) 在这里插入图片描述

7、springboot自动配置大体流程

7.1)springboot在做自动配置的时候,它会扫描classpath下面所有的jar,从jar中加载到它的自动配置类,然后把这些自动配置类以bean的形式注入到Ioc容器之中。然后我们开发人员在开发程序的时候 想使用哪个配置类,就可以在yaml 中进行相关的属性配置,就可以是直接使用某个配置类等等。

在这里插入图片描述
在这里插入图片描述

7.2)关于注解的说明
7.2.1) @SpringBootConfiguration 把启动类作为配置类
7.2.2) @EnableAutoConfiguration --开启自动配置类类
 7.2.2.1) @AutoConfigurationPackage --自动配置包
 7.2.2.2) @Import(AutoConfigurationImportSelector.class) --引入自动配置类选择器(根据引入的starter 通过@import筛选出对应的配置类,创建对应的bean,并注册到Ioc容器之中)

8、关于SpringBoot数据源的引入及第三方组件使用

8.1 使用数据源(DataSource)
8.2 使用数据库链接驱动(mysql)
8.3 使用第三方数据源组件
8.4 使用日志组件

如引入如下坐标即可使用(具体参见坐标注释说明):

         <!--springboot依赖的坐标-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         <!--数据源坐标-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-jdbc</artifactId>
       </dependency>
       <!--mysql坐标-->
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>
       <!--指定数据源类型,如未引入 则默认使用HikariDataSource-->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.0.9</version>
       </dependency>
        <!--日志坐标-->
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.15</version>
       </dependency>
       <!--用于yaml属性配置时 提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.7.2</version>
        </dependency>
        <!--用于省略getter setter 方法,简化代码,带需要在实体类上标注@Data注解 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator  校验器-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.0.Final</version>
        </dependency>

9 检验将属性填充至配置类

 9.1)编写主启动类
 9.2)编写配置类(如果不使用第三组件的数据源则可省略该配置类)
 9.3)编写普通的controller
 9.4) 编写yml属性配置文件
 9.5) 以Debug启动测试程序访问测试地址http://localhost:8080/test(请在controller类中打一个断点,也可忽而略,主要为了验证属性被注入成功)

package cn.tx.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @ClassName SpringApplication
 * @Description TODO
 * @Author jiac
 * @Date 2022/8/7 18:54
 * @Version 1.0
 **/

@SpringBootApplication
public class SpringApplications {

    public static void main(String[] args) {
        SpringApplication.run(SpringApplications.class,args);
    }
}
package cn.tx.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName DataSourceConfig
 * @Description TODO
 * @Author jiac
 * @Date 2022/8/7 19:46
 * @Version 1.0
 **/

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource") //进行第三方组件绑定 将yml属性注入
    public DruidDataSource dataSource(){
        return  new DruidDataSource();
    }
}

package cn.tx.boot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;

/**
 * @ClassName HelloController
 * @Description TODO
 * @Author jiac
 * @Date 2022/8/7 18:54
 * @Version 1.0
 **/

@RestController
public class HelloController {

    @Autowired  //自动装配  或者通过构造方法注入
    private DataSource dataSource;
    
    @RequestMapping("test")
    public  String hello(){
        System.out.println(dataSource);
        return "ok";
    }
}
#格式一定需要注意,同一层级一定需要对齐,否则测试会报错
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/tx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
#com.zaxxer.hikari.HikariDataSource  为默认数据源
#type: com.zaxxer.hikari.HikariDataSource
    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    min-evictable-idle-time-millis: 300000
    validation-query: SELECT 1 FROM DUAL

在这里插入图片描述

10springboot整合IdbcTemplate测试

 10.1)整个IdbcTemplate简单点理解就是对数据源坐标、连接数据库坐标引入 至pom文件并在yml属性配置文件进行配置
 10.2)整合JdbcTemplate进行数据库测试(由于前面驱动包均已准备就绪,此处只需要将JdbcTemplate注入使用即可,如下:)
   访问 http://localhost:8080/jdbctemp

package cn.tx.boot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;

/**
 * @ClassName 
 * @Description TODO
 * @Author jiac
 * @Date 2022/8/7 23:30
 * @Version 1.0
 **/

@RestController
public class JdbcTempController {

   // @Autowired  //自动装配  或者通过构造方法注入
    private JdbcTemplate jdbcTemplate;

    public JdbcTempController(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @RequestMapping("jdbctemp")
    public   List<Map<String, Object>> query(){
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_user");

        return maps;
    }
}

访问如下:
在这里插入图片描述

11springboot整合Mybatis测试(使用DruidDataSource,测试单表)

 10.1)springboot 整合mybatis的核心分为5步:
1、导入驱动包
2、建立实体类(因为使用了@Data注解 则可省略Setter和Getter方法)
3、建立接口mapper 将该接口加入容器(@mapper) 并编写对应的增删改查
4、编写DruidDataSource 配置类
5、编写controller 进行测试 (因为测试所以忽略了Service层) ,浏览器访问

      <!--springboot整合mybatis-->
       <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>1.3.1</version>
       </dependency>
package cn.tx.boot.model;
import lombok.Data;
import java.util.Date;


@Data
public class Person {

    private  int pid;

    private  String pname;

    private  String addr;

    private  int gender;

    private Date birth;
}

package cn.tx.boot.mapper;

import cn.tx.boot.model.Person;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import java.util.List;

@Mapper
public interface PersonMapper {

     @Select("select  * from person a where a.pid=#{pid}")
    public Person selectById(int pid);

    @Select("select * from person")
     public List<Person> selectAll();

    @Options(useGeneratedKeys = true,keyProperty = "pid")
    @Insert("insert into person(pid,pname,addr,gender,birth) values(#{pid},#{pname},#{addr},#{gender},#{birth})")
     public void insert(Person p);
}

package cn.tx.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName DataSourceConfig
 * @Description TODO
 * @Author jiac
 * @Date 2022/8/28 22:46
 * @Version 1.0
 **/

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource") //进行第三方组件绑定 将yml属性注入
    public DruidDataSource dataSource(){
        return  new DruidDataSource();
    }
}
package cn.tx.boot.controller;

import cn.tx.boot.mapper.PersonMapper;
import cn.tx.boot.model.Person;
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;

/**
 * @ClassName MybatisController
 * @Description TODO
 * @Author jiac
 * @Date 2022/8/28 22:33
 * @Version 1.0
 **/

@RestController
public class MybatisController {

    @Autowired
    private PersonMapper personMapper;



    @RequestMapping("selectById")
    public Person selectById(){
        return personMapper.selectById(1);
    }


    @RequestMapping("selectAll")
    public List<Person> selectAll(){
        return personMapper.selectAll();
    }

    @RequestMapping("insert")
    public void insert(){
        Person person=new Person();
        person.setPname("学java");
      personMapper.insert(person);
    }
}

在这里插入图片描述

。。。。。。。。。。。。。。。学习更新待续。

注:(学习记录是为了更好的留下印象,便于后续查看,也是希望在这个过程中能更好的了解这一部分知识,如有错误之处,请即时指出,请大家相关讨论交流)

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐