整合第三方技术
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
junit
springboot 自动帮我们整合和 junit 的依赖。
默认的整合步骤
- 导入测试对应的 starter
- 测试类使用 @SpringBootTest 修饰
- 使用自动装配的形式添加要测试的对象。
【代码】
接口
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
-
超出
需要在测试类注解中指向引导类 @SpringBootTest(classes = 引导类.class)
-
-
如果出现错误显示找不到 @SpringBootConfiguration 这个注解,就意味着找不到引导类。
@SpringBootConfiguration 是被引导类的 @SpringBootApplication 给包含了。我们可以点进去 @SpringBootApplication 就可以找到。
MyBatis
整合所需配置
- 核心配置:数据库连接相关信息
- 映射配置:SQL 映射(XML / 注解)
实验步骤
-
创建项目时候选择需要的功能
-
创建项目之后在 pron 文件内导入对应的 starter
-
配置相关信息
# 3. 配置相关信息 spring: datasource: driver-class-name: 驱动 url: jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC 指向的数据库 username: 账号 password: 密码 -
根据数据库创建实体类
这里我用的是之前的数据库
实体类,我用了 lombok 依赖
@Data @AllArgsConstructor @NoArgsConstructor public class Book { private int bookID; private String bookName; private int bookCounts; private String detail; } -
创建 dao 层的 mapper 对象
@Mapper public interface BookMapper { @Select("select * from ssmbuild.books where bookID = #{id};") Book getById(@Param("id") int id); } -
测试类
@SpringBootTest class Springboot05MybatisApplicationTests { @Autowired private BookMapper bookMapper; @Test void contextLoads() { System.out.println(bookMapper.getById(1)); } }
和我们之前 mybatis 的步骤相比简单许多,只需要导入对应的 starter 并配置数据库相关信息即可。
整合 myBatis 常见的错误
-
sql 驱动之间的版本不同导致的驱动错误,我们只需要根据对应的 mysql 版本去找到对应的 mysql 驱动即可
mysql 8.0 以上:com.mysql.cj.jdbc.Driver mysql 8.0 以下:com.mysql.jdbc.Driver -
sql 版本不同导致的 url 错误,我们只需要根据对应的 mysql 版本找到对应的 mysql 的 url 格式即可。
mysql 8.0 以上:jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC
MyBatis-plus
- 创建项目时候选择需要的功能
因为 mybatis-plus 并没有被 springboot 收录进去,所以我们只用选择数据库驱动即可
-
手动导入 mybatis-plus 依赖
<!--2. 手动导入 mybatis-plus 依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.0</version> </dependency> -
将 mapper 类几曾 baseMapper 并指向实体类就会自动生成大量的 sql 语句
@Mapper public interface BookMapper extends BaseMapper<Book> { }
剩余的步骤和整合 mybatis 相似。
整合 Druid
-
创建项目时候选择需要的功能
因为数据库连接池是给数据库用的,所以我们选择 mybatis 一样的功能即可。
-
手动导入 druid 的 starter 依赖
<!--手动导入 druid 依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.9</version> </dependency> -
配置相关信息
# 配置德鲁伊 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssmbuild?serverTimezone=UTC username: root password: root
总结
任何的第三方技术整合都是相同的步骤
- 导入依赖,在 Maven Repository: Search/Browse/Explore (mvnrepository.com) 里查找对应的依赖的 spring boot 版本导入。
- 配置依赖的相关信息,网上有大量的教程。
注意!优先选择 springboot 版本的依赖,选择 starter 的依赖。
SSMP整合案例
制作流程
- 先开发基础的 CRUD 功能,做一层测一层
- 调通页面,确认异步提交成功后,制作所有功能。
- 添加分页功能与查询功能。
个人目的
- 做出一个 SpringBoot 的 ssm & ssmp 模板。
第一步:创建项目选择功能
我们用到 springWeb 功能和 MySQL 功能。因为使用 mybatis-plus 所以不选择 spring 自带的 mybatis。
第二步:整合依赖
导入 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
第四步:创建实体类
我们在引导类同层目录下创建一个 pojo 包,里面放我们的实体类。
这里我们使用了一个叫 lombok 的依赖,可以有效提高我们的代码效率。
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 错误
-
检查 mapper.xml 配置文件是否放在 src 下的 resources 资源包下
-
检查 mapper 接口和 mapper.xml 配置文件名字是否相同
-
检查 mapper.xml 配置文件里的命名空间是否指向正确的位置
命名空间 = mapper 包路径 + mapper 接口名
-
检查 mapper.xml 配置文件中的 sql 语句是否指向对应得 mapper 接口得方法
-
检查 mybatis-plus 配置
# mybatis-plus mybatis-plus: # 指向你的 mapper.xml 配置文件地址 mapper-locations: classpath:/com/hyz/mapper/*.xml # 指向你的 mapper 包 type-aliases-package: com.hyz.mapper -
检查是否在 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 错误
-
检查测试类的 mapper 对象是否装载正确
-
检查你的 mapper 接口继承得 baseMapper 的泛型是否指向实体类。
-
检查实体类和属性是否对应数据库的表名和字段名