springboot框架

springboot框架

  1. 什么是Springboot以及Springboot的特点。
    2- 快速搭建springboot项目
    3 - springboot常用的配置文件类型.
    4 - 读取springboot配置文件的内容
    5 - 多环境配置
    6 - springboot整合数据源。
    7 - springboot整合mybatis.
    8. springboot自动装配原理—
    9 springboot整合mbatis-plus
    10 springboot整合swagger2
    11 springboot整合定时器

1.什么是Springboot以及Springboot的特点
1.1 什么是springboot?
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 . 理解:spring框架搭建的步骤:[1]依赖 [2]配置文件。 使用springboot可以简化上面的两个步骤
1.2 Springboot的特点

① 创建独立的 Spring 应用程序

② 嵌入的 Tomcat,无需部署 WAR 文件

③ 简化 Maven 配置

④ 自动配置 Spring

⑤ 提供生产就绪型功能,如指标,健康检查和外部配置

⑥ 开箱即用,没有代码生成,也无需 XML 配置。

  1. 使用idea快速搭建springboot工程

3.1在拥有互联网的情况下
创建出一个coller包

@RestController
public class HelloWorldController {

    @GetMapping("student")
    public Map<String,Object> hello(){
        Map<String,Object> map=new HashMap<>();
        map.put("name","黄黄");
        map.put("age",28);
        return map;
    }
}

4.pringboot常用的配置文件类型.

properties和yml格式。他们的区别就是格式上不同。

properties格式如下:

#修改端口号
server.port=8888
# 修改上下文路径
server.servlet.context-path=/fxd

yml结构

server:
  port: 8888
  servlet:
    context-path: /huanghuang

不管使用哪个配置文件,他们的名字必须叫application. 如果上面两个配置文件同时存在,而且里面有相同的配置。则properties优先级高于yml优先级。

5. java如何读取配置文件中的内容

java为什么需要读取配置文件的内容,我们开发时需要把哪些内容放入配置文件。

OSS:上传文件。accessKeyId,accessKeySecret等,这些内容能写在java源代码中。硬编码文件,不利维护。 我们需要把信息写入配置文件。

读取方式有两种:

第一种方式: 在类上@ConfigurationProperties(prefix=“”)

@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private String name;
    private Integer age;
    private String address;
    private List<String> hobby;
    private Map<String,Object> map;
}

第二种使用@Value读取属性:—他只能读取基本类型和String类型。加在属性上

    @Value("${student.map}")
    private Map<String,Object> map;

    @GetMapping("a")
    public Map<String,Object> a(){
        return map;
    }

6. springboot整合数据源

druid数据源: ----连接数据库

(1)引入相关的依赖。

       <!--mysql的驱动依赖-->
 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>

(2)配置数据源信息

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/company?serverTimezone=Asia/Shanghai
spring.datasource.druid.username=root
spring.datasource.druid.password=dongdong
spring.datasource.druid.initial-size=5

别忘记修改数据库!!!!!

(3)测试

@SpringBootTest
class Qy163Springboot01ApplicationTests {

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

}

7. springboot整合mybatis

(1)相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ykq</groupId>
    <artifactId>qy163-springboot02</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>qy163-springboot02</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mybatis和springboot整合的依赖 启动依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

(2)修改配置文件

#数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/company

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

#mybatis日志文件
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ykq.mapper.EmpMapper.queryAllById

(3) mapper接口

public interface EmpMapper {
    public List<Integer id> queryAllById();
}

(4)为mapper接口生成代理实现类
在这里插入图片描述

8. springboot自动装配原理

8.1 springboot包扫描原理

包建议大家放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。

主函数在运行时会加载一个使用@SpringBootApplication标记的类。而该注解是一个复合注解,包含@EnableAutoConfiguration,这个注解开启了自动配置功能。 该注解也是一个复合注解,包含@AutoConfigurationPackage。 该注解中包含@Import({Registrar.class}),这个注解引入Registrar类。该类中存在registerBeanDefinitions,可以获取扫描的包名。

如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={“包名也就是mapper层”})

8.2 springboot自动装配原理

主函数在运行会执行一个使用@SpringbootApplication注解的类,该注解是一个复合注解,包含@EnableAutoConfiguration, 该注解开启自动配置功能,该注解也是一个复合注解,包含@Import() 该注解需要导入AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理。

9. springboot整合mybatis-plus

9.1 mybatis-plus概述

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

在这里插入图片描述

不能替代mybatis ,以后对于单表操作的所有功能,都可以使用mp完成。但是链表操作的功能还得要校验mybatis.

9.2 如何使用emp

(1)创建表并加入数据

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

(2)创建一个springboot工程并引入相关的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ykq</groupId>
    <artifactId>qy163-springboot03</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>qy163-springboot03</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

(3)配置数据源

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql:///company

(4)创建实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

(5)创建一个dao接口

public interface pulas extends BaseMapper<User> {
}

(6)为接口生成代理实现类

@SpringBootApplication
@MapperScan(basePackages = "com.fxd.dao")
public class Qy163Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Qy163Springboot03Application.class, args);
    }

}

(7)测试

package com.ykq;

import com.ykq.dao.pulas;
import com.ykq.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Qy163Springboot03ApplicationTests {

    @Autowired
    private pulas  pulas;
    @Test
    void testFindById() {
        User user = userMapper.selectById(6);
        System.out.println(user);
    }

}

4.3 使用mp完成CRUD

    @Test
    void testfinByid(){
        System.out.println(pulas.selectById(1));
    }
    //删除
    @Test
    void  deleteByid(){
        int i = pulas.deleteById(1);
        System.out.println(i);
       //获取到多个id删除
        List<Integer> ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        int i1 = pulas.deleteBatchIds(ids);
        System.out.println(i1);
    }

    //默认主键的生成策略:雪花算法-唯一id值。
    //使用递增 如果想使用递增策略:必须保证表中的id递增,而且需要在@TableId(type=IdType.AUTO)
    @Test
    void testinsert(){
        User user = new User( 6L,"HUANGHUANG",12,"112312@!11");
        int insert = pulas.insert(user);
        System.out.println(insert);
    }

@Test
    void testUpdate(){
    User user = new User(6L,"黄启龙",110,"112213412@1");
    pulas.updateById(user);
}


@Test
    void testFind(){
    //select * from user where uname like '%乔%' or age 19 and 25;
    //Wrapper<T> queryWrapper:查询对象。 条件接口。QUeryWrapper 查询条件类  UpdateWrapper更新条件类  LambdaWrapper 使用lambda表达式
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.likeRight("name","_启");
    queryWrapper.or();
    queryWrapper.between("age",10,1000);
    List<User> users = pulas.selectList(queryWrapper);
    System.out.println(users);
}

@Test
    void testpage(){
    Page<User> page = new Page<>(1, 5);//current:当前第几页  size:每页显示条数
    pulas.selectPage(page,null);
    System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
    System.out.println("获取总页数"+page.getPages());//获取当前页的记录
    System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
}


//联表查询
    @Test
    void tsetpage2(){

        Page<Student> page = new Page<>(1, 2);//current:当前第几页  size:每页显示条数
        QueryWrapper<Student> wrapper=new QueryWrapper<>();
        wrapper.gt("smpno",3);
        studentMapper.findPage(page,wrapper);
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }

10.springboot整合swagger2

10.1 什么是swagger2

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务的接口文档 . 接口: controller相应的路径方法

10.2 为什么是swagger2

目前的项目基本都是前后端分离,后端为前端提供接口的同时,还需同时提供接口的说明文档。但我们的代码总是会根据实际情况来实时更新,这个时候有可能会忘记更新接口的说明文档,造成一些不必要的问题。

10.3 如何使用接口文档swagger2

 <!--swagger2依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.7.8</version>
        </dependency>

(2)创建一个配置类-swagger2

@Configuration
@EnableSwagger2 //开启swagger注解驱动
public class SwaggerConfig {
    @Bean //把方法返回的数据对象 交于spring容器管理
    public Docket docket(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("qy163")
                .apiInfo(getInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ykq.controller")) //只为com.ykq.controller包下的类生成接口文档
                .build();
        return docket;
    }

    private ApiInfo getInfo(){
        Contact DEFAULT_CONTACT = new Contact("黄黄", "http://www.fanqie.com", "28913312@qq.com");
        ApiInfo apiInfo=new ApiInfo("QY163心里测试系统API", "黄黄爱看番茄毒皇API", "1.1.0", "http://www.jd.com",
                DEFAULT_CONTACT, "黄黄", "http://www.fxd.com", new ArrayList<VendorExtension>());
        return apiInfo;
    }
}

(3)访问swagger在线文档
http://ip:port/swagger-ui.html路径
http://ip:port/doc.html

10.4 swagger中常用的注解

使用swagger注解对接口参数加以说明。

@Api(tags=“”)====使用在controller类上

@ApiOperation(value=“”)====接口方法上 接口方法加以说明

@ApiParam(value = “”,name = “”,required = true)

@ApiModel====实体类

@ApiModelProperty===>实体类的属性说明

4. springboot整合定时器-quartz

https://www.pppet.net/

定时器: 在指定的时间执行相应的业务代码。

应用场景: 比如: 定时删除OSS中冗余的文件

三十分钟未支付---->取消订单。

定时发送短信---->11.11====>

(1)引入quartz依赖

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

(2)配置定时器任务

@Component //交于spring容器该类对象
public class QuarzConfig {
    @Autowired
    private EmpMapper empMapper;
    @Scheduled(cron = "0/5 * * * * ? ")
    public void show(){
        //1.查询过期的订单
        List<Emp> emps = empMapper.selectList(null);
        System.out.println(emps);
        //2.删除过期的订单
    }
}

(3)开启定时器注解驱动

@SpringBootApplication
@MapperScan(basePackages = "com.ykq.dao")
@EnableScheduling //开启定时器注解
public class Qy163Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Qy163Springboot03Application.class, args);


    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值