springboot 整合第三方框架

347 阅读6分钟

springboot 项目创建

1.使用官方脚手架创建项目

image.png

在这个过程中,需要连接官方脚手架地址进行创建

image.png 等待一会之后,选择项目名称、jar版本即可

image.png

根据需要选择需要导入的依赖 和 springboot版本号

image.png

选择完成,等待创建完成即可

2. 使用aliyun 脚手架创建项目

从上面的介绍中,我们可以看到创建的过程中需要连接spring官方地址,可能出现访问失败的情况,那么这时候我们可以选择aliyun的脚手架进行创建

aliyun 脚手架地址:start.aliyun.com/

在选择aliyun的脚手架的时候要注意点,aliyun目前的springboot版本号较低,如果想选择高版本号,需要自行去 pom.xml 中修改springboot的版本号。关于pom文件中的依赖和版本号相关知识,如果不清楚的话得自己花点时间学习。

image.png

当然,aliyun的脚手架也有一些优秀的地方,将一些国内有些的框架也依赖进去了,比如mybatis plus

3.进入脚手架网址,生成项目压缩包

进入脚手架地址

image.png

其实进入后你就发现,脚手架网址创建跟在idea中没有什么两样,也是选择springboot版本 ,java版本,相关依赖,然后生成一个项目压缩包即可,自己将压缩包导入到工作空间即可。

image.png

springboot 整合 junit

  • 使用注解 @SpringBootTest ,将相关类标记为 测试application 启动类

  • 使用 @Autowired 从 spring 容器中获取相应的bean即可

  • 使用 @Test 标记执行方法

  • 执行test 方法即可

相关代码如下:

    <!-- springtest 相关依赖 ,springboot项目默认会导入该依赖 -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
    </dependency>

//测试代码

package com.example;

import com.example.dao.BookDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Test0104ApplicationTests {

   //1.使用junit测试的方法,第一步注入 相关对象
   @Autowired
   private BookDao bookDao;

   @Test
   void contextLoads() {

      //2.执行相关对象的测试方法即可
      bookDao.save();

   }

}

@SpringBootTest注解标记的类在启动或执行方法时,会在包下 com.example 下及父包 com 下查找是否有 @SpringBootApplication 标记的启动类 。如果没有则会报错,这时候可以指定 @SpringBootTest的 classes 属性的值为启动类即可。 比如

Test0104Application 为项目启动类

@SpringBootTest(classes = Test0104Application.class )
class Test0104ApplicationTests {

   //1.使用junit测试的方法,第一步注入 相关对象
   @Autowired
   private BookDao bookDao;

   @Test
   void contextLoads() {

      //2.执行相关对象的测试方法即可
      bookDao.save();

   }


springboot 整合 mybatis

  • 项目创建时,选择依赖坐标

image.png

如果是老项目,新增mybatis 则直接在 pom文件中增加依赖坐标即可。

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

可能好奇为什么有些依赖不需要版本号,有些依赖需要版本号? 如果是起步依赖,也就是 starter 这种,一般都是要写版本号的;如果是一般实际的框架坐标,那么则要看父项目里是否有定义了版本号,如果有推荐用父项目的,因为这都是官方调出来的最优版本号;自己如果贸然选用其他的,可能造成版本不匹配或其他问题。

查看父项目 springboot 中管理的坐标版本号可按照如下顺序查看:

image.png

image.png

image.png

  • 配置数据源 DataSource
spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?serverTimeZone=UTC
        username: root
        password: root
  • 添加mybatis 设置

mybatis:
    configuration:
        map-underscore-to-camel-case: true

在使用 yml 文件配置参数时,只需要输入相关配置的个别参数即会有相应的提示 如果没有相应的提示,则有两种情况:一种是相应的jar包没有导入 ;一种是当前配置文件不是 spring配置文件

对于第二种情况,可选择如下操作,将相应的文件添加为 spring 配置文件即可

image.png

  • 编写 mapper代理类
@Mapper
public interface StudentMapper {

    @Select("select * from student where id= #{id}")
    Student getStudentById(@Param("id") Long id);
}

至此,mybatis 整合完成

springboot 整合 mybatisplus

  • 导入相关依赖坐标

    mybatis plus 目前没有被官方收录,因为无法通过在创建项目时选择依赖坐标的方式进行选择,只能手动编辑 pom 文件进行添加

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.4.3</version>
</dependency>
  • 配置数据源 和 mybatis plus
spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?serverTimeZone=UTC
        username: root
        password: root

#mybatis plus配置
mybatis-plus:
    configuration:
        map-underscore-to-camel-case: true
  • 编写 mapper 代理类
@Mapper
public interface StudentMapper extends BaseMapper<Student> {

}

mybatis plus 针对日常使用常见,提供了一些常见接口的实现。因此我们在写 mapper 接口时直接集成 BaseMapper<T> 能帮助我们减少一部分工作量

至此,mybatis plus 整合完成

  • 分页拦截器

mybatis plus 的分页插件使用的拦截器的方式实现的。因此需要手动配置一个分页拦截器 new PaginationInnerInterceptor()并且添加到拦截器链之中

@Configuration
public class MybatisPlusConfig {


    @Bean
    public MybatisPlusInterceptor getMybatisPlusInterceptor() {

        // mybatis plus的分页是依靠拦截器的方式来实现的,因此需要添加拦截器,其中分页拦截器是 PaginationInnerInterceptor
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

springboot 整合 druid

德鲁伊作为一个非常优秀的连接池,也是经常使用到的。

  • 依赖坐标
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.2.6</version>
</dependency>
  • 添加 druid 配置,一共有两种配置
#配置 druid, 第一种直接设置 type
#spring:
#    datasource:
#        driver-class-name: com.mysql.cj.jdbc.Driver
#        url: jdbc:mysql://localhost:3306/test?serverTimeZone=UTC
#        username: root
#        password: root
#        type: com.alibaba.druid.pool.DruidDataSource


#第二种标准配置方式,推荐使用第二种
spring:
    datasource:
        druid:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://localhost:3306/test?serverTimeZone=UTC
            username: root
            password: root

#mybatis plus配置
mybatis-plus:
    configuration:
        map-underscore-to-camel-case: true

springboot 开发一个完整的ssm项目

该项目是一个支持 restful 风格请求的项目,数据库采用 mysql ,使用 mybatis plus 来操作数据库

  • 项目依赖
<dependencies>
   <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
   </dependency>

   <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
   </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>
  • application.yml 配置
spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?serverTimeZone=UTC
        username: root
        password: root
mybatis:
    configuration:
        map-underscore-to-camel-case: true
  • mp 拦截器添加
@Configuration
public class MybatisPlusConfig {


    @Bean
    public MybatisPlusInterceptor getMybatisPlusInterceptor() {

        // mybatis plus的分页是依靠拦截器的方式来实现的,因此需要添加拦截器,其中分页拦截器是 PaginationInnerInterceptor
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
  • mybatis plus 服务类

mybatis plus 针对数据库常见场景,生成了默认接口 IService 接口,直接继承该接口可以更便捷地开发

public interface IBookService 的实现类时会发现,有非常多的方法需要实现。这时候,我们只需要让实现类 继承 ```
ServiceImpl<BookDao, Book> 
``` extends IService<Book> {

}

我们在写 IBookService 的实现类时会发现,有非常多的方法需要实现。这时候,我们只需要让实现类 继承 ServiceImpl<BookDao, Book> ( BookDao 为 mapper 代理类, BooK 为实体类),这时候你会发现IService默认的方法都已经帮你实现,你只需要关注自己需要新增的方法即可。

@Service
public class IBookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {

}
  • 完成 controller
@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private IBookService iBookService;

    @GetMapping
    public Result<List<Book>> getAll() {

        return Result.success(iBookService.list());
    }

    @PostMapping
    public Result<Book> save(@RequestBody Book book) {

        iBookService.save(book);

        return Result.success(book);
    }

    @PutMapping
    public Result<String> update(@RequestBody Book book) {
        boolean result = iBookService.updateById(book);
        if (result) {
            return Result.success();
        }
        return Result.error("更新失败");

    }

    @DeleteMapping("{id}")
    public Result<String> delete(@PathVariable Integer id) {
        boolean result = iBookService.removeById(id);
        if (result) {
            return Result.success();
        }
        return Result.error("删除失败");
    }

    @GetMapping("{id}")
    public Result<Book> getById(@PathVariable Integer id) {

        return Result.success(iBookService.getById(id));
    }

    @GetMapping("/{currentPage}/{pageSize}")
    public Result<Page<Book>> getPage(@PathVariable Integer currentPage, @PathVariable Integer pageSize) {
        Page<Book> page = new Page<>(currentPage, pageSize);
        iBookService.page(page, null);
        return Result.success(page);
    }

}

完全遵循 restful 风格的controller 即编写完成

  • 添加统一的异常处理器 @ExceptionHandler
@RestControllerAdvice
@Slf4j
public class ExceptionAdvice {

    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex) {

        log.error("出现异常:" + ex.getMessage(), ex);

        return Result.error("内部服务错误,请联系管理员处理");
    }

}

至此,该项目的后端部分基本编写完成。使用 postman 或者 apipost 对相关接口进行测试即可