我想避免null check
,同时更新到database
的值。但我只需要更新来自UpdateUserRequest
对象的值。如何避免多次空检查?源和目标有不同的名称?我需要使用Map structs
或BeanUtils.copyProperties
或什么是最好的方法来实现这些?
@Transactional
public void update(String userId, UpdateUserRequest updateUserRequest) {
dataRepository.findByUserId(userId)
.ifPresent(userTransaction -> {
if(updateUserRequest.getAccountId()!=null)
{
userTransaction.setAccountId(updateUserRequest.getAccountId());
}
if(updateUserRequest.getUserAmount()!=null)
{
userTransaction.setUserAmount(updateUserRequest.getUserAmount());
}
if(updateUserRequest.getSendDate() != null)
{
userTransaction.setUserRequestedDate(Date.valueOf(updateUserRequest.getSendDate()));
}
if(updateUserRequest.getDelDate() != null)
{
userTransaction.setDelDate(Date.valueOf(updateUserRequest.getDelDate()));
}
dataRepository.save(userTransaction);
});
}
2条答案
按热度按时间xurqigkl1#
你可以通过在对象级别添加验证来避免空检查,spring提供了
@Valid
annotation,你可以检查更多的here at baeldung来验证对象并避免空检查,其他选项将使用来自google的Preconditions
,或者在实体级别处理它,注解非null的列,并让方法不检查,而只是保存,存储库将抛出,因为传递了null,您可以处理异常,返回一些消息或失败的响应,check here用于使列非空bn31dyow2#
我需要使用Map结构体或BeanUtils.copyProperties吗?或者实现这些的最佳方法是什么?
是的,对我来说,Mapstruct完全适合你的目的,例如:
当然,如果您的项目只需要在这个实体上执行null-check-then-set,那么手动执行会更好,因为依赖项开销的成本。