SpringBoot快速开发利器

SpringBoot - 图1

一、SpringBoot概述

1.1 传统的SSM的问题

a.初始化配置
为了使用SSM框架去开发,准备SSM框架的模板配置。
b.整合第三方框架
为了Spring整合第三方框架,单独的去编写xml文件。
c.后期维护
后期SSM项目后期xml文件特别多,维护xml文件的成本是很高的
d.部署工程
SSM工程部署也是很麻烦,依赖第三方的容器
e.敏捷式开发
基于Java的SSM开发方式是很笨重,而现在的python,php,NodeJS的敏捷式开发已经盖过Java一头

1.2 SpringBoot简介

SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-jpa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。
SpringBoot就是一个工具集。
SpringBoot - 图2
SpringBoot特点:

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

    二、SpringBoot初体验

    在线创建SpringBoot:
    SpringBoot - 图3

    2.1 SpringBoot项目初体验

    a.选择构建项目的类型
    SpringBoot - 图4
    b.项目的GAV
    SpringBoot - 图5
    c.指定SpringBoot版本和需要的依赖
    SpringBoot - 图6
    d.导入依赖
    org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web
    e.编写代码
    @RestController public class TestController { @GetMapping(“/test”) public String test(){ return “Hello SpringBoot!”; } }
    f.启动运行并测试
    找到开关类,运行main方法即可
    SpringBoot - 图7
    如果Idea创建SpringBoot超时,那么推荐使用,访问网站下载:https://start.spring.io
    SpringBoot - 图8
    导入到Idea中即可,等待下载jar

2.2 SpringBoot项目结构

a.pom.xml文件

  • 指定了一个父工程: 指定当前工程为SpringBoot,帮助我们声明了starter依赖的版本。
  • 项目的元数据:包名,项目名,版本号。
  • 指定了properties信息:指定了java的版本为1.8
  • 导入依赖:默认情况导入spring-boot-starter,spring-boot-starter-test
  • 插件:spring-boot-maven-plugin

b.gitignore文件
默认帮我们忽略了一些文件和目录,避免提交到Git仓库中
c.src目录
-src
-main
-java
-包名
启动类.java # 需要将controller类,放在启动类的子包中或者同级包下
-resources
-static # 存放静态资源的
-templates # 存储模板页面的,比如(jsp、ftl、beetl)
application.properties # SpringBoot提供的唯一的配置文件
-test # 只是为了测试用的

2.3 SpringBoot项目启动方式

a.运行启动类的main方法
b.maven命令
mvn spring-boot:run

c.采用jar包的方式运行
将当前项目打包成一个jar文件,并通过java -jar jar文件

三、SpringBoot核心

3.1 @Configuration和@Bean

  • 之前使用SSM去开发时,在xml文件中编写bean标签,但是SpringBoot不推荐使用xml文件。
  • @Configuration注解相当于beans标签
  • @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; } / @Configuration / }

3.2 @SpringBootApplication

@SpringBootApplication就是一个组合注解:

  • @SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。
  • @EnableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesLoader的类,加载META-INF/spring.factories配置类(已经开启的),通过SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。
    • 好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。
    • 坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。
    • 手动关闭自动装配指定内容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class)
  • @ComponentScan就相当于,帮助扫描注解的。

    3.3 SpringBoot的配置文件格式

    SpringBoot的配置文件支持properties和yml,甚至他还支持json。
    更推荐使用yml文件格式:
  1. yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置
  2. yml文件,相比properties更轻量级一些

yml文件的劣势:

  1. 严格遵循换行和缩进
  2. 在填写value时,一定要在: 后面跟上空格

    3.4 SpringBoot多环境配置

    在application.yml文件中添加一个配置项:
    spring: profiles: active: 环境名
    在resource目录下,创建多个application-环境名.yml文件即可
    在部署工程时,通过 java -jar jar文件 —spring.profiles.active=环境

    3.5 引入外部配置文件信息

    和传统的SSM方式一样,通过@Value的注解去获取properties/yml文件中的内容。
    如果在yml文件中需要编写大量的自定义配置,并且具有统一的前缀时,采用如下方式
    // Java程序 @ConfigurationProperties(prefix = “aliyun”) @Component @Data public class AliyunProperties { private String xxxx; private … …; } // 配置文件 aliyun: xxxx: xxxxxxxxx …

    3.6 SpringBoot配置热加载

    a.依赖jar
    org.springframework.boot spring-boot-devtools true
    b.settings配置
    SpringBoot - 图9
    c.重新构建工程
    SpringBoot - 图10

    四、SpringBoot整合框架

    4.1 整合Mybatis

    a.依赖jar
    mysql mysql-connector-java com.alibaba druid-spring-boot-starter 1.1.10 org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2
    b.编写配置文件
    application.yaml
    # 连接数据库的信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_startcoding?serverTimezone=Asia/Shanghai username: root password: root type: com.alibaba.druid.pool.DruidDataSource # mybatis配置 mybatis: # 扫描映射文件 mapper-locations: classpath:mapper/.xml # 配置别名扫描的包 type-aliases-package: com.qf.firstspringboot.entity configuration: # 开启驼峰映射配置 map-underscore-to-camel-case: true
    mapper/xxxMapper.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">
    b.编写代码
    entity层
    dao层
    service层:intf、impl
    controller层
    // 准备实体类 public class User implements Serializable { private Integer id; private String name; private String password; } // 1. 接口 public interface UserDao { List findAll(); } public interface UserService { List findAll(); } @Service public class UserServiceImpl implements UserService { @Autowired private UserDao dao; public List findAll(){ return dao.finaAll(); } } @RestController public class UserController { @Autowired private UserService service; @GetMapping(“/user/all.do”) public List all(){ return service.findAll(); } }
    c.编写配置文件
    application.yaml
    # 连接数据库的信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_startcoding?serverTimezone=Asia/Shanghai username: root password: root type: com.alibaba.druid.pool.DruidDataSource # mybatis配置 mybatis: # 扫描映射文件 mapper-locations: classpath:mapper/.xml # 配置别名扫描的包 type-aliases-package: com.qf.firstspringboot.entity configuration: # 开启驼峰映射配置 map-underscore-to-camel-case: true
    mapper/xxxMapper.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">
    // 在启动类中添加直接,扫描Dao接口所在的包
    @MapperScan(basePackages = “com.qf.firstspringboot.dao”)
    d.运行测试
    运行开关类,浏览器访问测试
    http://localhost:8080/user/all.do

    4.2 整合Lombok

    Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 这样的方法.
    a.idea安装插件
    SpringBoot - 图11
    b.在实体类上使用注解
    @Data public class District implements Serializable { private Integer id; private String name; }
    核心注解:

4.3 整合Swagger

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
使用步骤:
a.依赖jar
io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2
b.编写代码
@RestController @RequestMapping(“api/userlog/“) @Api(tags = “实现Userlog各种操作”) public class UserlogController{ / 注入业务逻辑层对象/ @Autowired private UserlogService service; / 查询 所有数据/ @ApiOperation(value = “实现全部查询”,notes = “实现全部查询”) @GetMapping(“all.do”) public R all(){ return service.queryAll(); } }
c.实现配置
@Configuration @EnableSwagger2 public class SwaggerConfig { / 构建文档的基本信息 / public ApiInfo createApi(){ return new ApiInfoBuilder().description(“StartCoding项目的接口在线文档”) .title(“StartCoding接口文档”).contact(new Contact(“Feri”,”http://www.qfedu.com","xingfei_work@163.com“)) .version(“1.0”).build(); } / 就是ioc创建实例 修饰方法 方法必须返回对象 / @Bean public Docket createDocket(){ return new Docket(DocumentationType.SWAGGER_2).apiInfo(createApi()) .select().apis(RequestHandlerSelectors.basePackage(“com.qfedu.scode.controller”)).build(); } }
d.运行测试
http://localhost:8080/swagger-ui.html
SpringBoot - 图12

4.4 整合Beetl

Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。
SpringBoot - 图13
https://www.kancloud.cn/xiandafu/beetl3_guide/1992542