springboot整合

1.springboot框架

1.1 什么是Springboot以及Springboot的特点。

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

1.2 springboot的特点

① 创建独立的 Spring 应用程序

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

③ 简化 Maven 配置

④ 自动配置 Spring

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

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

2 使用idea快速搭建springboot工程

2.1创建springboot工程

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

2.2 加载pom.xml配置依赖

创建controller层,conrtroller要在主体类包下(spring默认包扫描在主体类下)

在这里插入图片描述

2.3springboot 常用的配置文件类型.

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

properties格式如下:

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

yml结构

	server:
port: 8887
servlet:
 context-path: /bbb

2.4 springboot整合数据源

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

(1) 在pom.xml引入相关的依赖。

 <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) 在application.properties中配置数据源信息

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=root
spring.datasource.druid.initial-size=5

2.5 springboot整合mybatis

(1) 相关依赖

    <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

(2) 在application.properties中添加mybatis配置

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

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

(3)主体类中注解

在这里插入图片描述

(4)测试

mapper接口
public interface EmpMapper {
    public List<Student> findAll();
}

实体类

@TableName(value = “tbl_student”)实体类与表名进行映射

//使用递增 要想使用递增策略:必须保证表中的id递增 需要在主键上在加上 @TableId(type = IdType.AUTO)

@Tableid注解的value属性值为表中主键的字段名既可以对应上

@TableField(exist = false) 表中不存在该字段

@TableField(value = “name”) 实体类的属性名与表中列名不一致时要进行修改

//@TableName(value = "tbl_student")实体类与表名进行映射
public class Student {
    //表中的主键名不为id时,要进行人为修改
    //mp中默认主键的生成策略:  雪花算法 唯一id值
    //使用递增  要想使用递增策略:必须保证表中的id递增  需要在主键上在加上  @TableId(type = IdType.AUTO)
    @TableId(type = IdType.AUTO)
    private int sid;
    //@TableField(value = "name")   实体类的属性名与表中列名不一致时要进行修改
    private String sname;
    private int age;
    private int cid;


    @TableField(exist = false)   //表中不存在该字段
    private Class aClass;
}
测试类
@SpringBootTest
class Qy163Springboot02ApplicationTests {

    @Autowired
    private StudentMapper studentMapper;
    @Test
    void contextLoads() {
        System.out.println(studentMapper.findAll());
    }

}

3 springboot自动装配原理]

3.1 springboot包扫描原理

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

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

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

3.2 springboot自动装配原理

思考: 有没有自己使用DispatcherServlet. 为什么DispatcherServlet能用。

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

更加详细的springboot自动装配原理可借鉴
链接: springboot自动装配

4 springboot整合mybatis-plus

4.1 mybatis-plus概述

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
不能替代mybatis ,以后对于单表操作的所有功能,都可以使用mp完成。但是链表操作的功能还得要校验mybatis.

4.2如何使用mp

(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)创建一个mapper接口
mapper需要继承BaseMapper<>

public interface UserMapper extends BaseMapper<User> {
}

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

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

}

(7)测试

@SpringBootTest
class Qy163Springboot03ApplicationTests {

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

}

4.3 使用mp完成CRUD

@SpringBootTest
class Springboot3ApplicationTests {
    @Autowired
    private StudentMapper studentMapper;
    @Test
    void insert() {
        Student student= new Student();
        student.setSname("zyz");
        System.out.println(studentMapper.insert(student));
    }
    @Test
    void delete() {
        System.out.println(studentMapper.deleteById(5));
    }
    @Test
    void findAllPage(){
       Page<Student> page = new Page<>(1,2);
       studentMapper.selectPage(page,null);
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }
    @Test
    void update() {
        Student student= new Student();
        student.setSname("zy");
        student.setSid(6);
        System.out.println(studentMapper.updateById(student));
    }

4.4 使用mp完成分页条件查询

1.创建分页插件

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

2.StudentMapper接口

public interface StudentMapper extends BaseMapper<Student> {
    IPage<Student> findALl(IPage<Student> page,@Param("ew") Wrapper<Student> wrapper);
}

3.mapper.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">
<mapper namespace="com.zyx.springboot3.mapper.StudentMapper">
 
    <resultMap id="BaseResultMap" type="com.zyx.springboot3.pojo.Student">
            <id property="sid" column="sid" jdbcType="INTEGER"/>
            <result property="sname" column="sname" jdbcType="VARCHAR"/>
            <result property="age" column="age" jdbcType="INTEGER"/>
            <result property="cid" column="cid" jdbcType="INTEGER"/>
        <association property="aClass" javaType="com.zyx.springboot3.pojo.Class" autoMapping="true">
            <id property="cid" column="cid"/>
        </association>
    </resultMap>
 
    <sql id="Base_Column_List">
        sid,sname,age,
        cid,c.cname
    </sql>
    <select id="findALl" resultMap="BaseResultMap">
        select <include refid="Base_Column_List"/> from student s join class c on s.cid=c.cid
        //判断条件
        <if test="ew !=null">
            <where>
                ${ew.sqlSegment}
            </where>
        </if>
    </select>
</mapper>

4.Test测试类

@SpringBootTest
class Springboot3ApplicationTests {
    @Autowired
    private StudentMapper studentMapper;
     @Test
    void findAllPage(){
        Page<Student> page = new Page<>(1,3);
        QueryWrapper<Student> wrapper = new QueryWrapper<>();
        wrapper.le("sid",5);
        studentMapper.findALl(page, wrapper);
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }
}

5 springboot整合swagger2

5.1 什么是swagger2

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

5.2 为什么是swagger2

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

5.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.zyx.controller")) //注意只为com.ykq.controller包下的类生成接口文档
                .build();
        return docket;
    }

    private ApiInfo getInfo(){
        Contact DEFAULT_CONTACT = new Contact("王永亮", "http://www.baidu.com", "120@qq.com");
        ApiInfo apiInfo=new ApiInfo("QY163心里测试系统API", "QY163心里测试系统API", "1.1.0", "http://www.jd.com",
                DEFAULT_CONTACT, "志远科技", "http://www.aaa.com", new ArrayList<VendorExtension>());
        return apiInfo;
    }
}

(3)访问swagger在线文档
swagger在线文档
(4) swagger中常用的注解

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

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

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

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

@ApiModel====实体类

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

6.springboot整合定时器-quartz

Cron表达式在线工具
定时器: 在指定的时间执行相应的业务代码。

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

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

定时发送短信---->11.11====>
(1)引入quartz依赖

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

(2)配置定时器任务
Cron 表达式:* * * * * ?

@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.zyx.dao")
@EnableScheduling //开启定时器注解
public class Qy163Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Qy163Springboot03Application.class, args);


    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值