我正在开发一个Spring启动项目,我有两个JPA函数,我需要弄清楚哪个函数表现更好,减少对数据库查询性能的压力并利用Hibernate缓存。请指导使用哪个查询。
我的存储库界面:
@Repository
public interface CustomersRepository
extends JpaRepository<CustomersEntity, Long> {
@Query(nativeQuery = true, value = "SELECT * FROM customers WHERE c_mobile = ?1")
CustomersEntity findcustomerByMobile(String mobileNo);
@Override
List<CustomersEntity> findAll();
}
我的服务类:
@Scope("request")
@Service
public class CustomerServiceImpl implements ICustomerService {
@Autowired
private CustomersRepository customersRepository;
@Override
public boolean findCustomerByMobile1(long mobileNo) {
CustomersEntity customersEntity = customersRepository.findcustomerByMobile(mobileNo);
if (customersEntity != null)
return true;
else
return false;
}
@Override
public boolean findCustomerByMobile2(long mobileNo) {
List<CustomersEntity> entityList = customersRepository.findAll();
for (CustomersEntity entity : entityList) {
if (entity.getcMobile() == mobileNo) {
return true;
}
}
return false;
}
}
答案 0 :(得分:2)
无需将数据库中的所有记录下载到您的应用,然后过滤它们。有数千条记录会减慢。
相反,你应该在c_mobile
字段上创建一个索引然后像这个简单的方法一样使用:
public interface CustomerRepo extends JpaRepository<CustomersEntity, Long> {
CustomersEntity findByMobileNo(String mobileNo);
}
它将在闪存中工作(带索引)。
有关构建查询方法的更多信息,您可以找到here。