Spring Boot 启动类中直接调用service或mapper中的方法?

问题描述:在最初只了解后台时,想要输出数据库的测试数据验证环境是否搭建成功。于是想到在启动时调用 service 或者 mapper ,但是发现无论是 @Autowired 还是 private final 静态声明,得到的都是 Null(是因为项目刚启动时还没有加载完上下文,是没取不到类的)。

解决办法:使用 JUint 测试。JUnit 测试是 Java 语言的回归测试框架,是一种白盒测试方法,主要是进行逻辑,需要程序员了解测试代码的逻辑和功能。

Spring Boot 在创建完成后,会在 test/java 目录下生成一个 ApplicationTests 测试类。

可以不需要写 Mapper 或 Service,而是通过 DataSource(数组源组件)和 JdbcTemplate(用于访问数据库的组件)进行数据库连接测试,具体代码参照如下。

package com.example.hellospringboot;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.sql.SQLException;

@SpringBootTest
class HelloSpringbootApplicationTests {

    // 数据源组件
    @Autowired
    DataSource dataSource;

    // 用于访问数据库的组件
    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    void contextLoads() throws SQLException {
        System.out.println("默认数据源:" + dataSource.getClass());
        System.out.println("数据库连接实例:" + dataSource.getConnection());
        // 访问数据库
        Integer i = jdbcTemplate.queryForObject("SELECT count(*) FROM `person`", Integer.class);
        System.out.println("person 表中共有" + i + "条数据。");
    }

}

也可以在测试类中调用 Mapper 或 Service 测试(因为测试类是在启动完成后才运行的,此时已经完成了上下文加载,所以它是可以取到类的)

package com.example.hellospringboot;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.sql.SQLException;

@SpringBootTest
class HelloSpringbootApplicationTests {

    @Autowired
    PersonService personService;

    @Test
    void testMybatis() {
        Person person = new Person();
        person.setId(2);
        person.setName("Mary");
        person.setSex("2");
        person.setIdCardNum("222100199805214523");
        System.out.println(personService.update(person));
    }

}

当然这只是进行了曲线救国,解决了最初的想要测试的目的,但是并没有直接在启动类中调用 Service 和 Mapper,所以本篇文章未完待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值