JPA實現數據的更新操作
entity
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@DynamicInsert
@DynamicUpdate
@Access(AccessType.FIELD)
@Table(catalog = "sc", name = "t_student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
}
方式一 : 通過 jpa提供的save方法實現更新
repository
public interface StudentRepository extends JpaRepository<Student,Integer> {
}
StudentServiceImpl
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentRepository studentRepository;
@Override
public void updateStudent(StudentDto studentDto) {
// 前提: 能通過id查找到對應行數據
Optional<Student> op = studentRepository.findById(studentDto.getId());
op.ifPresent(student -> {
student.setName("newName");
studentRepository.save(student);
});
}
}
方式二: 通過jql實現更新
repository
@Repository
public interface StudentRepository extends JpaRepository<Student, Integer> {
@Transactional // 數據修改和刪除,需要顯示聲明事務 ,直接在接口方法上添加注解 或者在調用的方法上添加注解
@Modifying
@Query("update Student s set s.name =:name where s.id=:id")
void updateStudent(String name, Integer id);// 注意:定義更新方法 返回值只能是void或者int,不然會報錯
}
StudentServiceImpl
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentRepository studentRepository;
@Override
public void updateStudent(StudentDto studentDto) {
studentRepository.updateStudent("newName2",studentDto.getId());
}
}