Spring Boot笔记(一)

什么是springboot

Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。

springboot的好处

① 创建独立的 Spring 应用程序
② 嵌入的 Tomcat,无需部署 WAR 文件
③ 简化 Maven 配置
④ 自动配置 Spring
⑤ 开箱即用,没有代码生成,也无需 XML 配置。

准备条件

(1)JDK 环境必须是== 1.8== 及以上,传送门:jdk1.8.191 下载
(2)后面要使用到 Maven 管理工具 3.2.5 及以上版本.
(3)开发工具建议使用 IDEA.

创建springboot的方式有两种

使用idea快速创建

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

springboot的两种配置文件

  1. properties属性文件
  2. yml文件

java类读取配置文件的内容

  1. 第一种通过ConfigurationProperties 来读取相关的配置内容
    在这里插入图片描述
    ** Properties文件的语法**
    在这里插入图片描述
    yml文件的语法
student:
  id: 1
  name: xiaoming
  age: ${a.age}
  hobby:
    - LOL
    - DNF
    - CF
    - LOL
  lists:
    - LOL
    - DNF
  maps:
    k1: v1
    k2: v2
  sets:
    - LOL
    - DNF
    - CF
    - LOL
  birth: 2019/12/12
a:
  age: ${random.int(1,100)}

Properties 没有层级关系 使用=赋值
Yml 有层级关系 使用: 赋值
两种语法的配置是互补的[
2. 第二种读取配置文件的内容
在这里插入图片描述
这种方式只能读取基本类型以及字符串类型。
情况说明

  1. 如果配置是写在properties里面
    只有Map不能取到
  2. 如果配置写在yml 数组 集合 都取不到
  3. 如果属性是使用驼峰命名法则不能使用属性名注入,要使用@Value("${student.user-name}")来取值

不能使用@Value("${student.userName}")来取值

profiles配置详解

为什么要使用profiles

在开发中,一般有两种环境
1,生产环境 [项目上线,客户在使用中,就是生产环境]
2,开发环境[就是开发环境,不解释]
有时候开发环境和生产环境的配置方法是不一样的,那么如何快速的切换呢,这里就要使用profiles文件

使用方式:

在这里插入图片描述

springboot要注册web的三大组件

(1)注册serlvet

  1. 创建一个servlet类
public class MyServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("~~~~~~~~~service调用~~~~~~~~~~~~~~~~");
    }
}
  1. 创建一个配置类
@Configuration //等价于spring的配置文件 application.xml
public class MyConfig {
    @Bean //表示配置文件中的bean标签
    //ServletRegistrationBean表示用户注册servlet类的。
    public ServletRegistrationBean getServlet(){
        ServletRegistrationBean registrationBean=new ServletRegistrationBean();
        registrationBean.setServlet(new MyServlet());//
        registrationBean.addUrlMappings("/myservlet");
        return registrationBean;
    }
}
  1. 测试
    在这里插入图片描述

(2)注册过滤器filter

  1. 创建一个过滤器
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("~~~~~~~~~~~过滤器~~~~~~~~~~");
        filterChain.doFilter(servletRequest,servletResponse);//放行
    }
}
  1. 把该过滤器放入配置类中
@Bean
    public FilterRegistrationBean getFilter(){
         FilterRegistrationBean registrationBean=new FilterRegistrationBean();
         registrationBean.setFilter(new MyFilter());
         registrationBean.addUrlPatterns("/*");
         return registrationBean;
    }
  1. 测试
    在这里插入图片描述

基于maven的形式创建

  1. 引入父工程
  2. 加入web依赖
    在这里插入图片描述

springboot扫描包的原理

@SpringBootApplication
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import({Registrar.class})

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
        Registrar() {
        }

        public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
            AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0]));
        }

        public Set<Object> determineImports(AnnotationMetadata metadata) {
            return Collections.singleton(new AutoConfigurationPackages.PackageImports(metadata));
        }
    }

在这里插入图片描述

springboot自动装配的原理

@SpringBootApplication
@EnableAutoConfiguration
@Import({AutoConfigurationImportSelector.class})

在这里插入图片描述
在这里插入图片描述
127个自动配置类从哪来的?
在这里插入图片描述
在这里插入图片描述
只有在pom.xml文件中引入了哪些启动类的jar时,该启动类才会被加载进来。
在这里插入图片描述
启动时会自动注册DispatcherServlet原理:
DispatcherServletAutoConfiguration
在这里插入图片描述

springboot整合数据源

(1)引入druid的依赖。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

(2)在application.properties中配置数据源的信息

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/ssm_crud
spring.datasource.druid.username=root
spring.datasource.druid.password=root

(3)测试

@SpringBootTest
class Springboot03ApplicationTests {

    @Autowired
    private DataSource dataSource;
    @Test
    void contextLoads() throws  Exception{
        System.out.println(dataSource);
    }
}

springboot整合mybatis

(1)添加依赖

 <!--mybatis和springboot整合的依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

(2)在application.properties中引入映射文件的配置

#映射文件所在的路径
mybatis.mapper-locations=classpath:mapper/*.xml

(3) 在启动类处加入dao接口的扫描

@SpringBootApplication
@MapperScan(basePackages = {"com.ykq.dao"}) //为dao包下的所有接口生产实现类
public class Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot03Application.class, args);
    }
}

springboot整合pageHelper

(1)引入依赖

 <!--引入pageHelper的依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.13</version>
        </dependency>

(2) 写在service

 @Test
    void contextLoads() throws  Exception{
        PageHelper.startPage(1,5);
        List<Emp> list = empMapper.selectAll();
        PageInfo pageInfo=new PageInfo(list);
        System.out.println("总页码:"+pageInfo.getPages());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("当前页码的记录:"+pageInfo.getList().size());
    }

综合案例

  1. 使用restful风格书写url请求路径

  2. 统一的返回类型

public class Result {
    private int code;
    private String msg;
    private Object data;
    }
  1. 全局异常处理类
@RestControllerAdvice//处理异常的类
public class GlobalException {
    //当发生Exception异常时会执行该方法
    @ExceptionHandler(value = Exception.class)
    public Result handException(){
        return new Result(5000,"失败");
    }
}
  1. 设置全局json时间格式
    需要在application.properties配置文件中配置
#配置json的时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

在这里插入图片描述

  1. 添加dao的sql日志

同样需要在application.properties配置文件中配置(见上图

#添加sql日志com.ykq.dao必须为自己dao接口所在的包
logging.level.com.ykq.dao=debug
  1. 常见的注解
springmvc中常见的注解:
     @RestController
     @GetMapping(查询) 
     @PostMapping(添加)
     @DeleteMapping(删除)
     @PutMapping(修改)
     @RequestBody (把json对象转化为java对象 用于接受参数)
     @ResponseBody (把java对象转化为json对象 方法接口的返回值)
     @RequestMapping(请求路径)
     @PathVariable (获取请求地址栏的占位符的值)
     @ExceptionHandler (处理异常的方法上添加的注解)
     @RestControllerAdvice //处理异常的类
Spring的注解
     @controller
     @Service
     @Autowired
     @Component
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值