【bug日记】spring项目使用配置类和测试类操作数据库

最近学校课程要求使用spring操作数据库,时间有点久了,操作都不太熟悉了,遇到了很多坑,特此记录一下。

导入依赖

<!-- Spring Framework -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.10.RELEASE</version> <!-- 请根据实际情况选择合适的版本 -->
</dependency>

<!-- Spring Test -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.3.10.RELEASE</version> <!-- 请根据实际情况选择合适的版本 -->
    <scope>test</scope>
</dependency>

<!-- JUnit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version> <!-- 请根据实际情况选择合适的版本 -->
    <scope>test</scope>
</dependency>

<!-- MySQL Connector/J -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version> <!-- 请根据实际情况选择合适的版本 -->
</dependency>

编写配置类

  1. 使用Configuration注解注明这是一个配置类
  2. @ComponentScan("com.javaweb"):用于告诉Spring在指定的包及其子包中,扫描组件(比如带有 @Component@Service@Repository@Controller 等注解的类),并将其注册为 Spring 管理的 Bean。
  3. @EnableTransactionManagement:用于启用注解驱动的事务管理

@Configuration
@ComponentScan("com.javaweb")
@EnableTransactionManagement
public class DatabaseConfig {

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/javaweb-course");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

}

编写测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {DatabaseConfig.class})
public class MyTest {


    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public void testSelectCount(){
        Integer integer = jdbcTemplate.queryForObject("select count(*) from user", Integer.class);
        System.out.println("the count of user is " + integer);
    }
}
  1. @RunWith(SpringJUnit4ClassRunner.class):是JUnit框架中的注解,用于指定测试运行器。在这里,它告诉JUnit使用 Spring 提供的测试运行器来执行测试。

    在Spring应用程序中进行单元测试时,通常需要加载和配置 Spring 的应用上下文(ApplicationContext)。SpringJUnit4ClassRunner 是 Spring 提供的一个测试运行器,它负责在测试开始之前初始化 Spring 的上下文,以便你的测试类能够使用 Spring 托管的 bean。

    有以下几个作用:

    1. Spring 上下文初始化: 通过此注解,JUnit 将使用 SpringJUnit4ClassRunner 类来启动 Spring 的上下文,确保你的测试类能够访问应用程序中定义的 bean。

    2. 依赖注入:通过上下文初始化,你可以使用 `@Autowired` 或其他 Spring 的依赖注入机制,将 Spring 管理的 bean 注入到测试类中。

    3. 事务管理:SpringJUnit4ClassRunner 还提供了对事务的支持。默认情况下,它会在测试方法执行前开启事务,在测试方法执行后回滚事务,以确保测试方法不会修改数据库状态。

如果不使用该注解,则Spring就会出现空指针异常,即无法注入bean对象

2.@ContextConfiguration(classes = {DatabaseConfig.class})是 Spring Test 框架的注解,用于指定加载 Spring 配置的类。在这个特定的例子中,`DatabaseConfig.class` 是用于配置数据库相关的 Spring Bean 的配置类。

作用是告诉 Spring Test 在运行测试时加载哪个配置类来构建应用程序上下文(ApplicationContext)。在这里,DatabaseConfig.class包含了数据库相关的配置信息,例如数据源、`JdbcTemplate` 等。

解析这个注解的参数:

- classes = {DatabaseConfig.class}: 指定配置类,即包含了数据库相关配置的类。

通过在测试中使用 @ContextConfiguration,可以确保在测试执行过程中创建了与实际运行应用程序时相同的应用程序上下文。这有助于确保测试环境与实际环境的一致性,特别是当涉及到数据库或其他外部依赖时。

如果不使用该注解,则会出现无法加载应用程序的上下文

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值