【问题标题】:Not able to update data in MySQL using test class in spring boot无法在 Spring Boot 中使用测试类更新 MySQL 中的数据
【发布时间】:2020-06-26 09:03:12
【问题描述】:
@Test
public void testUpdateStudent(){
    Optional<Student> student = studentRepository.findById((long) 1);
    student.setName();
}
  1. 当我使用 Optional 时,我没有得到 setName() 方法,如何更新数据库中的记录。
  2. 另外,我为什么要使用这个 Optional?

【问题讨论】:

  • 能否提供完整的代码?我没有看到任何将学生保存到数据库的代码。

标签: java spring spring-boot unit-testing repository


【解决方案1】:

您可以使用getOne(),如果不愿意接收为Optional

@Test
public void testUpdateStudent(){
    Student student = studentRepository.getOne(1L);
    student.setName();

    studentRepository.saveAndFlush(student)
}

当数据库中不存在记录时,可能会获得NullPointerException

当我们使用findById(&lt;some_parameter&gt;) 时,Spring Data JPA 返回一个Optional 对象。满足isPresent()条件后可以得到对象如下:

@Test
public void testUpdateStudent(){
    Optional<Student> studentOpt = studentRepository.getOne(1L);
    if(studentOpt.isPresent()) {
        Student student = studentOpt.get();
        student.setName();
        studentRepository.saveAndFlush(student)
    }
}

【讨论】:

    【解决方案2】:

    当我使用 Optional 时,我没有得到 setName() 方法,如何更新我的数据库中的记录。

    由于您获得了 Optional,因此您可以通过以下方式设置该值:

    @Test
    public void testUpdateStudent(){
        Optional<Student> student = studentRepository.findById((long) 1);
        student.get().setName();
    }
    

    Optional.get() 为您提供 Optional 中存在的值 T。

    另外,我为什么要使用这个 Optional?

    老实说,这实际上取决于您的 studentRepository 是从哪种类型的存储库扩展而来的。您有各种可用的 Spring Data Repository,如 CrudRepository、PagingAndSortingRepository 等。您可以在查看 this 官方文档后达成共识。

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 2020-07-10
      • 1970-01-01
      • 2013-11-05
      • 2017-08-02
      • 2019-06-01
      • 2020-08-13
      • 2021-12-08
      • 2021-04-15
      相关资源
      最近更新 更多