一、SpringBoot介绍

SpringBoot其主要作用是快速的构建一个庞大的spring项目,并尽可能的减少一些xml配置。

1、SpringBoot的特点

  • SpringBoot主要特征
    • 创建独立的spring应用程序
    • 直接内嵌tomcat,jetty,undertow,不需要再打成war部署了
    • 提供了固定化的“starter”配置,用来简化配置
    • 尽可能的自动配置spring和第三方库
    • 提供产品级的功能,如:安全指标,运行状况监测和外部化配置等
    • 绝对不会生成代码,并且不需要xml配置
  • Springboot工程目录
    • 入口类所在的包是controller,service,bean的父目录
    • resource一般放置配置文件,旗下的所有内容打包后计入classes目录下
    • static目录用来存放网站的静态资源,例如js,css,图片等内容
    • templates,目录使用来存放网站的模板文件(xxx.html)只能通过控制层访问,例如thymeleaf,freemaker等
    • public是网站公共资源的存放目录,不需要通过服务器内部进行访问

      2、快速入门

      添加父工程坐标

      1. <parent>
      2. <groupId>org.springframework.boot</groupId>
      3. <artifactId>spring-boot-starter-parent</artifactId>
      4. <version>2.0.0.RELEASE</version>
      5. </parent>

      添加web启动器

      1. <dependencies>
      2. <dependency>
      3. <groupId>org.springframework.boot</groupId>
      4. <artifactId>spring-boot-starter-web</artifactId>
      5. </dependency>
      6. </dependencies>

      SpringBoot启动类

      ```java package com.smiledog; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

  • SpringBoot启动类
  • @author SmILeDog
  • @EnableAutoConfiguration 开启自动配置
  • @ComponentScan 开启扫描包 **/ @SpringBootApplication public class SpringBootRun { public static void main(String[] args) {
    1. SpringApplication.run(SpringBootRun.class,args);
    } } ```

    3、一些注解

    ```java
  • @Controller 代表该类为与前端进行交互的类
  • @RequestMapping 指定访问的请求路径,任何的请求方式都可以接收(post get put..)
  • @ResponseBody 代表返回的数据类型以json格式返回
  • @RequestBody 代表要以json的格式去接收前端传递的数据 *
  • @RestController 该注解是@Controller和@ResponseBody的组合体 @RestController = @Controller + @ResponseBody
  • @Controller和@RestController如何选择?
  • 如果该类中大多数的返回值类型都为JSON格式,那就选择@RestController *
  • @GetMapping、@PostMapping和@RequestMapping什么区别?
  • @RequestMapping是一个整合注解,不区分请求方式
  • @GetMapping、@PostMapping只能接收对应的请求方式的请求 *
  • SpringBoot项目如何实现的自动配置?
  • SpringBoot项目主要流程就是执行了一个main函数
  • 同时添加了一个类上的注解@SpringBootApplication
  • @SpringBootConfiguration 当前类为springBoot的配置类
  • @EnableAutoConfiguration 开启自动配置
  • @ComponentScan 对应Spring中的扫描包

  • @ComponentScan用于扫描其他注解的,如何找到其他注解的呢?

  • SpringBoot项目要求启动类必须在根目录下,这样才能扫描到其他包中的注解 *
  • SpringBoot的配置文件时如何被加载的?
  • SpringBoot项目启动时会自动去项目的根路径下查找一个名字叫application的文件
    1. bootstrap.ymlbootstrap.properties)先加载
    2. application.ymlapplication.properties)后加载
  • 扩展问题:application.yml和bootstrap.yml文件的区别

  • 配置文件的后缀.properties和.yml什么区别?

  • 相同点:都是以key-value的形式进行存储的
  • 不同点:展示的形式不同,yml格式更具层次感

  • 注意事项:yml文件对格式有严格的要求,

  • 1.子属性与父属性之间以两个空格隔开
  • 2.值与属性之间有一个空格
  • 3.值的后面不要有空格 *
  • SpringBoot执行流程源码
  • SpringBoot静态资源加载源码
  • SpringBoot加载配置文件源码
    1. <a name="5krl7"></a>
    2. ### 4、SpringBoot整合事务
    3. ```java
    4. 在业务层的事务管理(ServiceImpl)
    5. 在除查询操作的功能方法上打上这个注解@Transactional

    5、SpringBoot通用Mapper

    就是内置了一些增删改查的sql操作不用我们再写了,可以拿来直接用
    1. <!-- 通用mapper -->
    2. <dependency>
    3. <groupId>tk.mybatis</groupId>
    4. <artifactId>mapper-spring-boot-starter</artifactId>
    5. <version>2.0.2</version>
    6. </dependency>
    7. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    8. @Mapper
    9. public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
    10. }

    6、拦截器

    ```java package com.smiledog.interceptor;

import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

/**

  • 拦截器
  • @author SmILeDog / @Component public class loginInterceptor implements HandlerInterceptor { /

    • 请求前的处理
    • @param request
    • @param response
    • @param handler
    • @return */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println(“请求前的拦截!!!”); return true; }

      /**

    • 请求中的处理
    • @param request
    • @param response
    • @param handler
    • @param modelAndView */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { System.out.println(“请求中的拦截!!!”); }

      /**

    • 请求后的处理
    • @param request
    • @param response
    • @param handler
    • @param ex */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { System.out.println(“请求后的拦截!!!”); } } ~~~自定义拦截~~ package com.smiledog.config;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**

  • 自定义拦截器
  • @author SmILeDog / @Component public class MyInterceptor implements WebMvcConfigurer { @Autowired HandlerInterceptor handlerInterceptor; /

    • 添加一个拦截器
    • @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) {

      1. //拦截处理

      registry.addInterceptor(handlerInterceptor).addPathPatterns(“/update*”); } }

      1. <a name="vWZDb"></a>
      2. ## 二、预设SpringBoot项目框架
      3. <a name="PAU1u"></a>
      4. #### pom.xml
      5. ```java
      6. <!--引入Springboot的父工程 代表该项目是一个SpringBoot项目-->
      7. <parent>
      8. <groupId>org.springframework.boot</groupId>
      9. <artifactId>spring-boot-starter-parent</artifactId>
      10. <version>2.0.0.RELEASE</version>
      11. </parent>
      12. <dependencies>
      13. <dependency>
      14. <groupId>org.springframework.boot</groupId>
      15. <artifactId>spring-boot-starter-web</artifactId>
      16. </dependency>
      17. <!--该坐标包含了mybatis及mybatis-spring的jar包-->
      18. <dependency>
      19. <groupId>org.mybatis.spring.boot</groupId>
      20. <artifactId>mybatis-spring-boot-starter</artifactId>
      21. <version>1.3.2</version>
      22. </dependency>
      23. <!--mysql驱动包-->
      24. <dependency>
      25. <groupId>mysql</groupId>
      26. <artifactId>mysql-connector-java</artifactId>
      27. <version>5.1.38</version>
      28. </dependency>
      29. <!--Thymeleaf启动器 前端模板引擎-->
      30. <dependency>
      31. <groupId>org.springframework.boot</groupId>
      32. <artifactId>spring-boot-starter-thymeleaf</artifactId>
      33. </dependency>
      34. </dependencies>

      application.yml

      1. #配置项目端口号
      2. server:
      3. port: 10086
      4. #配置项目的访问根路径
      5. #servlet:
      6. #path: /SpringBoot
      7. #配置静态资源存放路径
      8. spring:
      9. resources:
      10. static-locations: classpath:/static/,classpath:/templates/,classpath:/public/,classpath:/resources/
      11. #配置数据源
      12. datasource:
      13. driver-class-name: com.mysql.jdbc.Driver
      14. url: jdbc:mysql:///springboot
      15. username: root
      16. password: 1234
      17. #配置mybatis
      18. mybatis:
      19. mapper-locations: classpath:/mapper/*.xml
      20. type-aliases-package: com.smiledog.bean
      21. #配合mybatis的日志输出
      22. logging:
      23. level:
      24. com.smiledog.mapper: debug