springboot:整合第三方技术,ssmp合并,mybatis和mp的注册异常

153 阅读5分钟

整合第三方技术

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情

junit

springboot 自动帮我们整合和 junit 的依赖。

默认的整合步骤

  1. 导入测试对应的 starter
  2. 测试类使用 @SpringBootTest 修饰
  3. 使用自动装配的形式添加要测试的对象。

【代码】

接口

package com.hyz.Mapper;

/**
 * @author workplace
 * @date 2022/4/21 23:32
 */
public interface BookMapper {
    /**
     * 测试方法
     */
    void save();
}

实现类

package com.hyz.Mapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

/**
 * @author workplace
 * @date 2022/4/21 23:32
 */
@Repository
public class BookMapperImpl implements BookMapper{
    @Override
    public void save() {
        System.out.println("book is running ...");
    }
}

测试类

package com.hyz;

import com.hyz.Mapper.BookMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
class Springboot04JunitApplicationTests {

    @Autowired
    BookMapper bookMapper;

    @Test
    void contextLoads() {
        bookMapper.save();
    }
}

【注意】

  • @Autowired 只能作用于全部变量,不能作用于局部变量。

  • 测试类在引导类的包或子包下,如果超出了需要在测试类头上标注

    • 未超出 @SpringBootTest

      image-20220421235743812

    • 超出

      需要在测试类注解中指向引导类 @SpringBootTest(classes = 引导类.class)

      image-20220422000116244

  • 如果出现错误显示找不到 @SpringBootConfiguration 这个注解,就意味着找不到引导类。

    @SpringBootConfiguration 是被引导类的 @SpringBootApplication 给包含了。我们可以点进去 @SpringBootApplication 就可以找到。


MyBatis

整合所需配置

  • 核心配置:数据库连接相关信息
  • 映射配置:SQL 映射(XML / 注解)

实验步骤

  1. 创建项目时候选择需要的功能

  2. 创建项目之后在 pron 文件内导入对应的 starter

    image-20220422164258980

  3. 配置相关信息

    image-20220422170854021

    # 3.  配置相关信息
    spring:
      datasource:
        driver-class-name: 驱动 
        url: jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC 指向的数据库
        username: 账号
        password: 密码
    
  4. 根据数据库创建实体类

    这里我用的是之前的数据库

    image-20220422172150119

    实体类,我用了 lombok 依赖

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Book {
        private int bookID;
        private String bookName;
        private int bookCounts;
        private String detail;
    }
    
  5. 创建 dao 层的 mapper 对象

    @Mapper
    public interface BookMapper {
        @Select("select * from ssmbuild.books where bookID = #{id};")
        Book getById(@Param("id") int id);
    }
    
  6. 测试类

    @SpringBootTest
    class Springboot05MybatisApplicationTests {
    
        @Autowired
        private BookMapper bookMapper;
    
        @Test
        void contextLoads() {
            System.out.println(bookMapper.getById(1));
        }
    
    }
    

和我们之前 mybatis 的步骤相比简单许多,只需要导入对应的 starter 并配置数据库相关信息即可。


整合 myBatis 常见的错误

  1. sql 驱动之间的版本不同导致的驱动错误,我们只需要根据对应的 mysql 版本去找到对应的 mysql 驱动即可

    mysql 8.0 以上:com.mysql.cj.jdbc.Driver
    mysql 8.0 以下:com.mysql.jdbc.Driver
    
  2. sql 版本不同导致的 url 错误,我们只需要根据对应的 mysql 版本找到对应的 mysql 的 url 格式即可。

    mysql 8.0 以上:jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC
    

MyBatis-plus

  1. 创建项目时候选择需要的功能

因为 mybatis-plus 并没有被 springboot 收录进去,所以我们只用选择数据库驱动即可

image-20220422174147049

  1. 手动导入 mybatis-plus 依赖

    <!--2. 手动导入 mybatis-plus 依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.0</version>
    </dependency>
    
  2. 将 mapper 类几曾 baseMapper 并指向实体类就会自动生成大量的 sql 语句

    @Mapper
    public interface BookMapper extends BaseMapper<Book> {
    }
    

剩余的步骤和整合 mybatis 相似。


整合 Druid

  1. 创建项目时候选择需要的功能

    因为数据库连接池是给数据库用的,所以我们选择 mybatis 一样的功能即可。

    image-20220422182032965

  2. 手动导入 druid 的 starter 依赖

    <!--手动导入 druid 依赖-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.9</version>
    </dependency>
    
  3. 配置相关信息

    # 配置德鲁伊
    spring:
      datasource:
        druid:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssmbuild?serverTimezone=UTC
          username: root
          password: root
    

总结

任何的第三方技术整合都是相同的步骤

  1. 导入依赖,在 Maven Repository: Search/Browse/Explore (mvnrepository.com) 里查找对应的依赖的 spring boot 版本导入。
  2. 配置依赖的相关信息,网上有大量的教程。

注意!优先选择 springboot 版本的依赖,选择 starter 的依赖。

SSMP整合案例

SSMP整合案例

制作流程

  • 先开发基础的 CRUD 功能,做一层测一层
  • 调通页面,确认异步提交成功后,制作所有功能。
  • 添加分页功能与查询功能。

个人目的

  • 做出一个 SpringBoot 的 ssm & ssmp 模板。

第一步:创建项目选择功能

我们用到 springWeb 功能和 MySQL 功能。因为使用 mybatis-plus 所以不选择 spring 自带的 mybatis。

image-20220422205958542

image-20220422210124601


第二步:整合依赖

导入 mp、druid、lombok 的依赖

        <!--导入依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

第三步:修改引导类名和配置文件

  • 我们修改引导类名
  • 我们修改配置文件格式为 yml
  • 我们设置端口为 80

image-20220422211132412


第四步:创建实体类

我们在引导类同层目录下创建一个 pojo 包,里面放我们的实体类。

这里我们使用了一个叫 lombok 的依赖,可以有效提高我们的代码效率。

image-20220422211618633

package com.hyz.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author workplace
 * @date 2022/4/22 21:13
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}

第五步:druid 连接数据库配置

我们需要配置 druid 连接数据库的配置

# 配置连接数据库
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssmbuild?serverTimezone=UTC
      username: root
      password: root

完成这一步之后,就开始去写 mapper 的东西了。


第六步:创建 mapper 类

MyBatis 出现 BindingException 错误

  1. 检查 mapper.xml 配置文件是否放在 src 下的 resources 资源包下

    image-20220422214936811

  2. 检查 mapper 接口和 mapper.xml 配置文件名字是否相同

    image-20220422214756116

  3. 检查 mapper.xml 配置文件里的命名空间是否指向正确的位置

    命名空间 = mapper 包路径 + mapper 接口名

    image-20220422215200423

  4. 检查 mapper.xml 配置文件中的 sql 语句是否指向对应得 mapper 接口得方法

    image-20220422215530052

  5. 检查 mybatis-plus 配置

    # mybatis-plus
    mybatis-plus:
      # 指向你的 mapper.xml 配置文件地址
      mapper-locations: classpath:/com/hyz/mapper/*.xml
      # 指向你的 mapper 包
      type-aliases-package: com.hyz.mapper
    
  6. 检查是否在 pom.xml 里添加资源

    <build>
      g  <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!--修改mp依赖错误-->
        <resources>
            <resource>
                <directory>src/main/</directory>
                <!-- 此配置不可缺,否则mybatis的Mapper.xml将会丢失 -->
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--指定资源的位置-->
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
    

MyBatis-plus 出现 BindingException 错误

  1. 检查测试类的 mapper 对象是否装载正确

    image-20220422230211778

  2. 检查你的 mapper 接口继承得 baseMapper 的泛型是否指向实体类。

    image-20220422230252091

  3. 检查实体类和属性是否对应数据库的表名和字段名

    image-20220422230505953