spring 引导中的可选 class?
Optional class in spring boot?
我正在开发一个管理帐户的应用程序。我制作了一个名为 org.sid.entities 的包,其中存在 IBanqueJob 接口及其代码
package org.sid.metier;
import org.sid.entities.Compte;
import org.sid.entities.Operation;
import org.springframework.data.domain.Page;
public interface IBanqueMetier {
public Compte consulterCompte(String CodeCompte);
public void verser(String CodeCompte,double mt);
public void retirer(String CodeCompte, double mt);
public void virement(String Cp1, String Cp2, double mt);
public Page<Operation> listOperation(String cp,int page,int size);
}
以及这个接口的实现,下面是它的代码
package org.sid.metier;
import java.util.Date;
import org.sid.dao.CompteRepository;
import org.sid.dao.OperationRepository;
import org.sid.entities.Compte;
import org.sid.entities.Operation;
import org.sid.entities.Versement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class BanqueMetierImpl implements IBanqueMetier {
@Autowired
private CompteRepository compteRepository;
@Autowired
private OperationRepository operationRepository;
@Override
public Compte consulterCompte(String CodeCompte) {
Compte cp = compteRepository.findById(CodeCompte);
if (cp == null)
throw new RuntimeException("compte introuvable");
return cp;
}
我在下面的这一行中有一个错误,上面写着 "Type mismatch: cannot convert from Optional to Compte "
Compte cp = compteRepository.findById(CodeCompte);
compteRepository.findById returns 一个 Optional,因为它可能实现了 CrudRepository 接口。
所以请使用
Optional<Compte> cp = compteRepository.findById(CodeCompte);
findById
returns 某物的 Optional
,这意味着对于给定的 id
我们要么只有一个结果,要么我们没有任何结果.
为了解压这个Optional
,我通常建议做的是:
Compte cp = compteRepository.findById(CodeCompte).orElseThrow(() -> new Exception("Element not found!");
如果我们没有找到该特定 ID 的任何内容,这将引发异常。
在某些情况下return一些默认值比抛出异常更有利。在这种情况下,我们可以使用:
Compte cp = compteRepository.findById(CodeCompte).orElse(new Compte());
或供应商:
Compte cp = compteRepository.findById(CodeCompte).orElseGet(() -> new Compte());
我正在开发一个管理帐户的应用程序。我制作了一个名为 org.sid.entities 的包,其中存在 IBanqueJob 接口及其代码
package org.sid.metier;
import org.sid.entities.Compte;
import org.sid.entities.Operation;
import org.springframework.data.domain.Page;
public interface IBanqueMetier {
public Compte consulterCompte(String CodeCompte);
public void verser(String CodeCompte,double mt);
public void retirer(String CodeCompte, double mt);
public void virement(String Cp1, String Cp2, double mt);
public Page<Operation> listOperation(String cp,int page,int size);
}
以及这个接口的实现,下面是它的代码
package org.sid.metier;
import java.util.Date;
import org.sid.dao.CompteRepository;
import org.sid.dao.OperationRepository;
import org.sid.entities.Compte;
import org.sid.entities.Operation;
import org.sid.entities.Versement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class BanqueMetierImpl implements IBanqueMetier {
@Autowired
private CompteRepository compteRepository;
@Autowired
private OperationRepository operationRepository;
@Override
public Compte consulterCompte(String CodeCompte) {
Compte cp = compteRepository.findById(CodeCompte);
if (cp == null)
throw new RuntimeException("compte introuvable");
return cp;
}
我在下面的这一行中有一个错误,上面写着 "Type mismatch: cannot convert from Optional to Compte "
Compte cp = compteRepository.findById(CodeCompte);
compteRepository.findById returns 一个 Optional,因为它可能实现了 CrudRepository 接口。
所以请使用
Optional<Compte> cp = compteRepository.findById(CodeCompte);
findById
returns 某物的 Optional
,这意味着对于给定的 id
我们要么只有一个结果,要么我们没有任何结果.
为了解压这个Optional
,我通常建议做的是:
Compte cp = compteRepository.findById(CodeCompte).orElseThrow(() -> new Exception("Element not found!");
如果我们没有找到该特定 ID 的任何内容,这将引发异常。
在某些情况下return一些默认值比抛出异常更有利。在这种情况下,我们可以使用:
Compte cp = compteRepository.findById(CodeCompte).orElse(new Compte());
或供应商:
Compte cp = compteRepository.findById(CodeCompte).orElseGet(() -> new Compte());