Skip to content
本页目录

1.springBoot整合Junit

  1. 搭建SpringBoot工程
  2. 引入starter-test起步依赖
  3. 编写测试类
  4. 添加测试相关注解
  • @RunWith(SpringClass.classs)
  • SpringBootTest(class = 启动类.class)

首先,创建好项目之后,springBoot默认帮我们引入了 starter-test这个依赖,我们可以看一下 pom.xml,里边已经引入了:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

所以我们省去了这个步骤

因为单元测试我们大部分测试的业务中的代码,所以我们写一个service, 代码如下:

package com.example.javaspringboot.service;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/person")

public class person {
@GetMapping("/getUser")
    public void getUser () {
        System.out.print("张三");
    }
}

然后我们写一个单元测试,路径我们就在test/java下新建一个testPerson的类,代码如下:

package com.example.javaspringboot;

import com.example.javaspringboot.controller.HelloJava;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = JavaSpringBootApplication.class)
class JavaSpringBootApplicationTests {

    @Autowired
    private HelloJava helloJava;

    @Test
    void testHello() {
        helloJava.hello();
    }
}
package com.example.javaspringboot;

import com.example.javaspringboot.controller.HelloJava;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = JavaSpringBootApplication.class)
class JavaSpringBootApplicationTests {

    @Autowired
    private HelloJava helloJava;

    @Test
    void testHello() {
        helloJava.hello();
    }
}

然后启动一下这个类,我的项目在控制台包了个错,上边显示找不到RunWith这个注解,我从网上找了方法,原因是我们没有引入junit, 我们在maven的配置中引入一下这个包:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

然后刷新一下maven,可以看到代码的飘红消失了,在启动一下测试类,可以看到控制台打印了 张三, 符合我们的预期;

如果测试类的包名和我们代码写的包名一样,我们可以不用指定引导类文件,也就是直接写 @SpringBootTest

2.springBoot整合Redis

  1. 搭建SpringBoot工程
  2. 引入redis起步依赖
  3. 配置redis相关属性
  4. 注入RedisTemplate模板
  5. 编写测试方法,测试

我们还是用之前的工程,在 pom.xml中引入redis依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后刷新一下maven

然后在我们修改一下之前写的测试类,代码如下:

package
import com.example.javaspringboot.controller.HelloJava;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = JavaSpringBootApplication.class)
class JavaSpringBootApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSet() {

        redisTemplate.boundValueOps("name").set("李四");
    }

    @Test
    public void testGet () {
        Object name =  redisTemplate.boundValueOps("name").get();
        System.out.print(name);
    }
}
import com.example.javaspringboot.controller.HelloJava;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = JavaSpringBootApplication.class)
class JavaSpringBootApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSet() {

        redisTemplate.boundValueOps("name").set("李四");
    }

    @Test
    public void testGet () {
        Object name =  redisTemplate.boundValueOps("name").get();
        System.out.print(name);
    }
}

可以看到我们写了两个方法,第一个是往redies中存入一个值,第二个是获取这个值并打印

我们启动一下 redis, 这个文件我存在了我的百度网盘下,关注我的微信公众号【凤凰城下的小码农】后,回复【软件】,里边有一个 【Redis-x64-3.2.100.zip】压缩文件, 解压之后运行【redis-server.exe】即可启动 redis

我们先不调用写入的方法,我们先调 testGet这个方法,可以看到控制台中输出一个 null,证明 redies中还没有 name这个 值,然后我们调用 testSet 这个方法,面板中上方有一个条,如果显示绿色,表示 redies 链接成功, 运行完成之后我们再调用 testGet 这个方法,可以看到控制台输出了 李四, 证明我们测试通过

这个连接的是本地的 redies, 如果是到线上呢,肯定是不能用本地的,我们可以再配置一下,在 application.yaml中写入如下配置

server:
  port: 8081
spring:
  porfiles: dev
  redis:
    host: 127.0.0.1  # redis的主机
    port: 6379 # redis的端口号, 默认就是6739, 也可以换成别的

3. springBoot整合MyBatis和Mysql

  1. 搭建springBoot工程
  2. 引入mybatis起步依赖, 添加mysql驱动
  3. 编写DataSource和MyBatis相关配置
  4. 定义表和实体类
  5. 编写dao和mapper文件/纯注解开发
  6. 测试

下面我们看一下实际代码中如何操作:

我们在项目工程的pom.xml文件中引入mybatis和mysql的依赖:

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

刷新一下maven,下载一下这些包

a.我们先看一下如何使用注解的方式

首先强调一下,用注解开发可以不用写mybatis配置信息,所以我们只需要配置一下mysql

在整合mysql之前,我们先启动一下mysql,关于如何启动,这里不过多介绍, 可以查看这篇文章 传送

我们在mysql中创建一个库,暂且叫他 test, 新建一个表,叫 user, 存一些用户的用户名 name和密码 password, 主键为 id, 随便写几条数据, 这样准备工作就做好了

我们打开application.yaml文件配置一下

    datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///test?serverTimezone=UTC  # 本地的可以用///表示
    username: root
    password: root

注意一定要写 serverTimezone=UTC, 这个是配置时区的,时区对应不上会报错

然后我们写一个类,路径为 src/main/java/com/example/javaspringboot/domain, 新建一个 User 类,添加用户名和密码的属性,并写getter和setter以及toString的方法,代码如下:

package com.example.javaspringboot.domain;

public class User {
    private int id;
    private String name;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return name;
    }

    public void setUsername(String username) {
        this.name = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }
}
package com.example.javaspringboot.domain;

public class User {
    private int id;
    private String name;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return name;
    }

    public void setUsername(String username) {
        this.name = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }
}

这里说一下如何快速创建getter和setter的方法,在文件中右键,选择【Gererate】, 选择【Getter and Getter】,勾选上对应的属性,点确定就ok了, toString方法一样

然后我们写一下对应的mapper, 目前我了解到mapper的作用是作为单独的一层,写一些数据库相关操作的映射,这样我们就不必再业务代码中写一堆查询

src/main/java/com/example/javaspringboot/mapper 路径下新建一个 UserMapper的文件,注意创建是这个文件的类型不是 class而是 interface, 写如下代码:

package com.example.javaspringboot.mapper;

import com.example.javaspringboot.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserMapper {

    @Select("select * from user")
    public List<User> findAll();
}
package com.example.javaspringboot.mapper;

import com.example.javaspringboot.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserMapper {

    @Select("select * from user")
    public List<User> findAll();
}

至此,我们就把刚才在数据库中创建的那个user表里的数据都查出来了,我们写个单元测试验证一下

我们在单元测试的文件中添加如下代码:

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testUser () {
        List<User> list = userMapper.findAll();

        System.out.print(list);
    }

跑一下单元测试,可以看到控制台已经把数据库中的数据打印出来了!

b. 我们还可以使用xml的方式

我们还用domain文件夹下的 User类

然后我们在mapper文件夹下新建一个接口,叫做 UserXmlMapper, 里面写上如下代码,注意查询数据的方法我们没有写注解:

ackage com.example.javaspringboot.mapper;


import com.example.javaspringboot.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserXmlMapper {

    public List<User> findAll();
}

然后我们写一个xml文件,里边有我们需要的sql语句,以及对应方法的映射,我们通常把这种配置文件放在resource文件夹下,在这个 文件夹下新建一个mapper的文件夹,里边新建一个xml文件,叫UserMapper.xml, 注意xml文件是有约束头的,具体内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.javaspringboot.mapper.UserXmlMapper">
    <select id="findAll" resultType="user">
        select * from user
    </select>
</mapper>

这里解释一下,namespace是我们刚才写的接口的全路径,表示当前xml和那个文件的映射,id就是对应方法名,resultType是别名,接下来我 们需要配置一下,使这个xml生效

application.yaml文件中添加如下配置:

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml # mapper配置文件的路径,这里匹配所有以Mapper.xml结尾的文件
  type-aliases-package: com.example.javaspringboot.domain # domain的全路径
# config-location: # 指定mybatis的核心配置文件

接下来我们测试一下我们写的代码是否能跑通

同样在我们的测试类中再添加一个方法:

    @Autowired
    private UserXmlMapper userXmlMapper;
    
    @Test
    public void testUser2 () {
        List<User> list = userXmlMapper.findAll();
        System.out.print(list);
        System.out.print("测试通过");
    }

可以从控制台看到我们打印的数据已经输出了

至此, springBoot整合其他框架的内容已经介绍完了。

文中所有的代码以及之后的代码已经上传到github和码云中,想要源码的同学关注我得vx公号【凤凰城下的小码农】后,回复【spring】即可获取。