数据操作
在JPA中,保存数据时必须携带实体关系,但是DTO中往往缺少实体关系。因此,在保存数据之前必须先查询数据,然后根据DTO中的数据进行增量的更新。
FooService.java
package com.example.demo.service;
import com.example.demo.*;
import com.taocares.commons.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class FooService {
@Autowired
private FooRepository fooRepository;
public Optional<FooDto> findById(Long fooId) {
Optional<Foo> foo = fooRepository.findById(fooId);
if (foo.isPresent()) {
return Optional.of(BeanUtils.copyProperties(foo.get(), FooDto.class));
} else {
return Optional.empty();
}
}
public void save(FooDto fooDto) {
if (fooDto.getId() != null) { // 修改
Foo foo = fooRepository.getOne(fooDto.getId());
BeanUtils.copyProperties(fooDto, foo);
fooRepository.save(foo);
} else { // 新增
Foo foo = BeanUtils.copyProperties(fooDto, Foo.class);
fooRepository.save(foo);
}
}
}
JpaRepository
提供了两种查询单条数据的方法:
findById
:返回Optional
对象,推荐在查询方法中使用。getOne
:返回实体,懒加载的模式,如果数据不存在会直接抛出EntityNotFoundException
,推荐在数据修改时使用。
Last updated