1,SpringBoot简介

SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来==简化== Spring 应用的==初始搭建==以及==开发过程==。

使用了 Spring 框架后已经简化了我们的开发。而 SpringBoot 又是对 Spring 开发进行简化的,可想而知 SpringBoot 使用的简单及广泛性。既然 SpringBoot 是用来简化 Spring 开发的,那我们就先回顾一下,以 SpringMVC 开发为例:

  1. 创建工程,并在 pom.xml 配置文件中配置所依赖的坐标

springboot 3x 接入 jwt springboot w3c_配置文件

 

  1. 编写 web3.0 的配置类
    作为 web 程序,web3.0 的配置类不能缺少,而这个配置类还是比较麻烦的,代码如下

springboot 3x 接入 jwt springboot w3c_spring boot_02

 

  1. 编写 SpringMVC 的配置类

springboot 3x 接入 jwt springboot w3c_测试类_03

 

做到这只是将工程的架子搭起来。要想被外界访问,最起码还需要提供一个 Controller 类,在该类中提供一个方法。

  1. 编写 Controller

springboot 3x 接入 jwt springboot w3c_spring boot_04

 

从上面的 SpringMVC 程序开发可以看到,前三步都是在搭建环境,而且这三步基本都是固定的。SpringBoot 就是对这三步进行简化了。

starter

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

parent

  • 所有 SpringBoot 项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
  • spring-boot-starter-parent(2.5.0)与 spring-boot-starter-parent(2.4.6)共计57处坐标版本不同

实际开发

  • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供

G:groupid

A:artifactId

V:version

  • 如发生坐标错误,再指定version(要小心版本冲突)

2,配置文件

2.1 配置文件格式

我们现在启动服务器默认的端口号是 8080,访问路径可以书写为


http://localhost:8080/books/1


在线上环境我们还是希望将端口号改为 80,这样在访问的时候就可以不写端口号了,如下


http://localhost/books/1


SpringBoot 程序如何修改呢?SpringBoot 提供了多种属性配置方式

  • application.properties server.port=80
  • application.yml server: port: 81
  • application.yaml server: port: 82

==注意:SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。==

3,SpringBoot整合junit

回顾 Spring 整合 junit

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class UserServiceTest {        @Autowired    private BookService bookService;        @Test    public void testSave(){        bookService.save();   } }

使用 @RunWith 注解指定运行器,使用 @ContextConfiguration 注解来指定配置类或者配置文件。而 SpringBoot 整合 junit 特别简单,分为以下三步完成

  • 在测试类上添加 SpringBootTest 注解
  • 使用 @Autowired 注入要测试的资源
  • 定义测试方法进行测试

3.1 环境准备

创建一个名为 springboot_07_testSpringBoot 工程,工程目录结构如下

springboot 3x 接入 jwt springboot w3c_测试类_05

 

com.itheima.service 下创建 BookService 接口,内容如下

public interface BookService {    public void save(); }

com.itheima.service.impl 包写创建一个 BookServiceImpl 类,使其实现 BookService 接口,内容如下

@Service public class BookServiceImpl implements BookService {    @Override    public void save() {        System.out.println("book service is running ...");   } }

3.2 编写测试类

test/java 下创建 com.itheima 包,在该包下创建测试类,将 BookService 注入到该测试类中

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

==注意:==这里的引导类所在包必须是测试类所在包及其子包。

例如:

  • 引导类所在包是 com.itheima

  • 测试类所在包是 com.itheima

如果不满足这个要求的话,就需要在使用 @SpringBootTest 注解时,使用 classes 属性指定引导类的字节码对象。如 @SpringBootTest(classes = Springboot07TestApplication.class)

4,SpringBoot整合mybatis

4.1 回顾Spring整合Mybatis

Spring 整合 Mybatis 需要定义很多配置类

  • SpringConfig 配置类
  • 导入 JdbcConfig 配置类
  • 导入 MybatisConfig 配置类 @Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}
  • JdbcConfig 配置类
  • 定义数据源(加载properties配置项:driver、url、username、password) public class JdbcConfig {
•     @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource getDataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}
  • MybatisConfig 配置类
  • 定义 SqlSessionFactoryBean
  • 定义映射配置 @Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
    MapperScannerConfigurer msc = new MapperScannerConfigurer();
    msc.setBasePackage("com.itheima.dao");
    return msc;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
    SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
    ssfb.setTypeAliasesPackage("com.itheima.domain");
    ssfb.setDataSource(dataSource);
    return ssfb;
}

4.2 SpringBoot整合mybatis

4.2.1 创建模块

  • 创建新模块,选择 Spring Initializr,并配置模块相关基础信息

springboot 3x 接入 jwt springboot w3c_spring boot_06

 

  • 选择当前模块需要使用的技术集(MyBatis、MySQL)

4.2.2 定义实体类

com.itheima.domain 包下定义实体类 Book,内容如下

public class Book {    private Integer id;    private String name;    private String type;    private String description;        //setter and getter        //toString }

4.2.3 定义dao接口

com.itheima.dao 包下定义 BookDao 接口,内容如下

public interface BookDao {    @Select("select * from tbl_book where id = #{id}")    public Book getById(Integer id); }

4.2.4 定义测试类

test/java 下定义包 com.itheima ,在该包下测试类,内容如下

@SpringBootTest class Springboot08MybatisApplicationTests { @Autowired private BookDao bookDao; @Test void testGetById() { Book book = bookDao.getById(1); System.out.println(book); } }

4.2.5 编写配置

我们代码中并没有指定连接哪儿个数据库,用户名是什么,密码是什么。所以这部分需要在 SpringBoot 的配置文件中进行配合。

application.yml 配置文件中配置如下内容

spring: datasource:   driver-class-name: com.mysql.jdbc.Driver   url: jdbc:mysql://localhost:3306/ssm_db   username: root   password: root

4.2.6 测试

运行测试方法,我们会看到如下错误信息

springboot 3x 接入 jwt springboot w3c_springboot_07

 

错误信息显示在 Spring 容器中没有 BookDao 类型的 bean。为什么会出现这种情况呢?

原因是 Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口。而我们要解决这个问题需要在BookDao 接口上使用 @MapperBookDao 接口改进为

@Mapper public interface BookDao {    @Select("select * from tbl_book where id = #{id}")    public Book getById(Integer id); }

==注意:==

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

4.2.7 使用Druid数据源

现在我们并没有指定数据源,SpringBoot 有默认的数据源,我们也可以指定使用 Druid 数据源,按照以下步骤实现

  • 导入 Druid 依赖 <dependency>    <groupId>com.alibaba</groupId>    <artifactId>druid</artifactId>    <version>1.1.16</version> </dependency>
  • application.yml 配置文件配置
    可以通过 spring.datasource.type 来配置使用什么数据源。配置文件内容可以改进为 spring: datasource:   driver-class-name: com.mysql.cj.jdbc.Driver   url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC   username: root   password: root   type: com.alibaba.druid.pool.DruidDataSource

SpringBoot 到这就已经学习完毕,接下来我们将学习 SSM 时做的三大框架整合的案例用 SpringBoot 来实现一下。我们完成这个案例基本是将之前做的拷贝过来,修改成 SpringBoot 的即可,主要从以下几部分完成

  1. pom.xml
    配置起步依赖,必要的资源坐标(druid)
  2. application.yml
    设置数据源、端口等
  3. 配置类
    全部删除
  4. dao
    设置@Mapper
  5. 测试类
  6. 页面
    放置在resources目录下的static目录中