无法在 Spring 启动中使用测试类更新 MySQL 中的数据


@Test
public void testUpdateStudent(){
Optional<Student> student = studentRepository.findById((long) 1);
student.setName();
}
  1. 当我使用可选时,我没有获得 setName(( 方法,如何更新数据库中的记录。
  2. 另外,我为什么要使用此可选?

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

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

当数据库中不存在记录时,可能会有NullPointerException的机会。

当我们使用findById(<some_parameter>)时,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)
}
}

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

由于您正在获取可选,因此可以通过以下方式设置值:

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

Optional.get(( 给出了 Optional 中存在的值 T。

另外,我为什么要使用此可选?

老实说,这实际上取决于您的学生存储库从哪种类型的存储库扩展。你有各种各样的Spring Data Repostories,如CrudRepository,PagingAndSortingRepository等。您可以在浏览此官方文档后达成共识。

最新更新