SpringBoot整合Mybatis与druid实现流程详解
作者:己不由心王道长 发布时间:2022-09-17 17:05:31
SpringBoot整合junit
SpringBoot整合junit
①还是一样,我们首先创建一个SpringBoot模块。
由于我们并不测试前端,而只是整合junit,所以不用选择模板,选择其中的web即可。
完成以后我们打开Pom.xml,会发现报错,这里我的版本不能到2.7.5,降版本。
②导入对应的starter
查看Pom.xml文件:我们发现已经有了一个Spring-Boot-stater-test,这其实就是SpringBoot已经自己整合了junit
<?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.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>SpringBoot-juint</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBoot-juint</name>
<description>SpringBoot-juint</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>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>
问题随之而来,既然SpringBoot已经整合了junit,那我们还整合啥?答案是不用整合!
因为SpringBoot项目在创建的时候已经默认整合了junit,至于为什么是这样,是因为SpringBoot是一个maven项目,而maven在执行它的生命周期的时候测试是跳不过去的,它必须执行测试。
③测试类添加@SpringBootTest注解修饰
package com.example;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringBootJuintApplicationTests {
@Test
void contextLoads() {
}
}
④ 使用自动装配添加要测试的对象
这里测试啥呢?测试一下dao层
一、编写Dao层接口:
package com.example.Dao;
public interface UserDao {
public void selectAll();
}
二、编写Dao层接口的实现类:值得说明的是,一般情况下,因为Dao层的mapper需要用到反射,一般是没有实现类的,这里只是为了测试方便!!!
package com.example.Dao.impl;
import com.example.Dao.UserDao;
import org.springframework.stereotype.Repository;
@Repository//把这个类交给Spring容器管理
public class ImplUserDao implements UserDao {
@Override
public void selectAll() {
System.out.println("selectAll.......");
}
}
三、在测试类中使用@Autowired进行注入
package com.example;
import com.example.Dao.UserDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringBootJuintApplicationTests {
@Autowired
UserDao userDao;
@Test
void contextLoads() {
userDao.selectAll();
}
}
四、执行测试
SpringBoot整合junit的classes
在上面整合的junit并不完整,为什么这样说,请看:
现在SpringBoot的引导类和测试类的引导类都在同级目录下,现在我要把测试类的引导类移动到com包下
执行测试,输出:Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
:说的是它找不到SpringBoot的配置类,需要你使用@ContextConfiguration或者@SpringBootTest为你的测试类指定SpringBoot的配置类
为什么出现以下情况,原来是@SpringBootTest会默认从当前包及其子包下寻找SpringBoot的配置类,当我们把测试类中的SpringBootJuintApplicationTests移动到com包下时,它就找不到对应的SpringBoot的配置类,因为它这时不在引导类包及其子包下,也就无法从spring容器中获取对应bean,则无法进行注入。
解决方法:在@SpringBootTest注解中指定引导类或者使用@ContextConfiguration
@SpringBootTest(classes = SpringBootJuintApplication.class)
@ContextConfiguration(classes = SpringBootJuintApplication.class)
SpringBoot整合Mybatis
整合前的准备
值得说明的是,这里整合Mybatis用的是注解的方式
一、创建数据库数据
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username` varchar(20) CHARACTER SET utf8 COLLATE utf8_esperanto_ci NULL DEFAULT NULL,
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_esperanto_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_esperanto_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES ('zhangsan', '775033');
INSERT INTO `user` VALUES ('lisi', '330678');
SET FOREIGN_KEY_CHECKS = 1;
二、创建工程、新建对应实体类
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.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>SpringBoot-Mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBoot-Mybatis</name>
<description>SpringBoot-Mybatis</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</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>
创建实体类对象:
package com.example.entity;
public class User {
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
}
整合Mybatis
一、上面已经导入了对应技术用到的坐标,现在要配置数据源,在哪配置呢,在SpringBoot的配置文件:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot
username: root
password: ******
二、编写dao层接口()
package com.example.dao;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserDao {
@Select("select username,password from user")
public List<User> selectAll();
}
三、编写测试
package com.example.springbootmybatis;
import com.example.dao.UserDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringBootMybatisApplicationTests {
@Autowired
UserDao userDao;
@Test
void contextLoads() {
System.out.println(userDao.selectAll());
}
}
测试:
报了以上两个错误,这是我们希望看到的,为什么?
原因:在上面的驱动中我们使用的是MySQL 8.X版本的,在8及以上的MySQL驱动中,SpringBoot强制我们进行时区设置,并且要用:com.mysql.cj.jdbc.Driver
解决:这里我们只需要在配置文件中添加失去设置和更改Driver即可
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
username: root
password: ******
测试:
值得注意的是:在MySQL8才需要设置时区和使用cj.jdbc.
SpringBoot 整合druid
配置前置知识小点
因为druid是一个连接池,需要提供数据源,测试也还是那一套,这里直接复制上边的模块进行重新开发。
整合druid
首先,我们应该知道的是,SpringBoot之所以好用,就是因为它可以很好的整合其他的第三方资源和技术,核心就是:导入对应的stater,根据配置格式,编写非默认值对应的配置项
一、导入对应druid的stater
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
二、在配置文件中配置数据源
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
username: root
password: ******
三、测试
测试?配置完成了?完成了,SpringBoot就是这么好用
来源:https://blog.csdn.net/qq_63992577/article/details/127462848
猜你喜欢
- @TransactionalEventListener监听事务项目背景最近在项目遇到一个问题A方法体内有 INSERT、UPDATE或者DE
- 形参和实参java在定义方法时可以设置参数,参数分为形参和实参,形参是指在定义函数时用于接收外部传入数据的参数,而实参是指在调用方法时主调函
- 前言spring-boot-actuator是一个spring-boot提供的用于监控组件,只需要在代码中加入依赖就可以了<depen
- App 启动方式冷启动App 没有启动过或 App 进程被杀,系统中不存在该 App 进程,此时启动即为冷启动。需要创建 App 进程,加载
- JAVA简单写学生信息管理系统,实现学生信息的输入、查询、修改、删除操作package Week;import jdk.internal.u
- 本文演示以Spark作为分析引擎,Cassandra作为数据存储,而使用Spring Boot来开发驱动程序的示例。1.前置条件安装Spar
- 1. 前言前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Secu
- Mutex类、Event类、SemaphoreSlim类和ReaderWriterLockSlim类等提供了多个进程之间的线程同步。&nbs
- ArratList 类:存放同一数据类型容器(只能为引用数据类型,因实际其内部存放的是地址)1.导入其所在包import java.util
- 第一节:服务端初始化首先看下在我们用户代码中netty的使用最简单的一个demo://创建boss和worker线程(1)EventLoop
- 1.可见性通常,我们无法保证执行读操作的线程能看到其他线程写入的值,因为每个线程都由自己的缓存机制。为了确保多个线程之间对内存写入操作的可见
- 前言Redis是一个开源的Key-Value数据缓存,和Memcached类似。Redis多种类型的value,包括string(字符串)、
- 下面通过代码看下springboot 跨域配置类,代码如下所示:ackage org.fh.config;import java.io.IO
- 路由做Android/iOS原生开发的时候,要打开一个新的页面,你得知道你的目标页面对象,然后初始化一个Intent或者ViewContro
- 目录匿名方法的代价C#9 中使用静态匿名方法匿名函数 在 C# 中已经出现很多年了,虽然匿名函数用起来很爽,但代价是不小的,为了避免不必要那
- 后台管理页面往往需要登录才可以进行操作,这时就需要Seession来记录登录状态要实现起来也是非常简单,只需要自定义一个HandlerInt
- 一、什么是网关限流:在微服务架构中,网关层可以屏蔽外部服务直接对内部服务进行调用,对内部服务起到隔离保护的作用,网关限流,顾名思义,就是通过
- 1、首先 当然是启动genymotion2、然后Tomcat ,启动tomcat。。如图将请求的URL地址变为10.0.3.2 ,比如在电脑
- 方式一:基于现有控件进行扩展,如基于button进行扩展,UI可直接用xmal进行编辑设计,逻辑用xaml.cs进行编辑方法二:直接创建wp
- 守护线程在Java中有两类线程User Thread(用户线程)Daemon Thread(守护线程)守护线程的功能非常简单,在其本身是一个