SpringBoot整合Mybatis与druid实现流程详解

 更新时间:2022年10月25日 10:36:12   作者:己不由心王道长  
这篇文章主要介绍了springboot整合mybatis plus与druid详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的下伙伴可以参考一下

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就是这么好用

到此这篇关于SpringBoot整合Mybatis与druid实现流程详解的文章就介绍到这了,更多相关SpringBoot整合Mybatis与druid内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java编程生产者消费者实现的四种方法

    Java编程生产者消费者实现的四种方法

    Java生产者和消费者问题是线程安全模型中的经典问题:生产者和消费者在同一个时间段共用同一个存储空间,生产者向存储空间中添加产品呢,消费者取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞
    2021-10-10
  • MyBatis-Plus拦截器实现数据权限控制的示例

    MyBatis-Plus拦截器实现数据权限控制的示例

    本文主要介绍了MyBatis-Plus拦截器实现数据权限控制的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java使用OTP动态口令(每分钟变一次)进行登录认证

    Java使用OTP动态口令(每分钟变一次)进行登录认证

    这篇文章主要介绍了Java使用OTP动态口令(每分钟变一次)进行登录认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • java语言基础之标识符和命名规则详解

    java语言基础之标识符和命名规则详解

    这篇文章主要给大家介绍了关于java语言基础之标识符和命名规则的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决

    Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决

    这篇文章主要介绍了Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Spring Boot通过Junit实现单元测试过程解析

    Spring Boot通过Junit实现单元测试过程解析

    这篇文章主要介绍了Spring Boot通过Junit实现单元测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    这篇文章主要介绍了Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java中checkbox实现跨页多选的方法

    Java中checkbox实现跨页多选的方法

    最近做了一个项目其中遇到这样的需求,要实现checkbox跨页多选功能,经过小编整理,顺利解决,今天小编给大家分享Java中checkbox实现跨页多选的方法,需要的的朋友参考下
    2017-01-01
  • yaml文件中${}语法取值方式

    yaml文件中${}语法取值方式

    在Spring Boot中,配置文件中的${test.aa}等占位符的值可以通过系统属性或依赖的其他模块来获取,这意味着,可以通过JVM参数或者系统属性来指定这些值,例如,通过在启动命令中添加-Dtest.aa=your_value或在代码中通过
    2024-10-10
  • spring关于组件的注入及获取流程场景分析

    spring关于组件的注入及获取流程场景分析

    这篇文章主要介绍了spring关于组件的注入及获取流程场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-07-07

最新评论