使用JpaRepository时,查询和数据库性能与使用JpaRepository的本地查询一起使用findAll()

时间:2018-04-20 08:47:33

标签: spring hibernate spring-boot jpa spring-data-jpa

我正在开发一个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;
    }
}

1 个答案:

答案 0 :(得分:2)

无需将数据库中的所有记录下载到您的应用,然后过滤它们。有数千条记录会减慢。

相反,你应该在c_mobile字段上创建一个索引然后像这个简单的方法一样使用:

public interface CustomerRepo extends JpaRepository<CustomersEntity, Long> {
    CustomersEntity findByMobileNo(String mobileNo);
}

它将在闪存中工作(带索引)。

有关构建查询方法的更多信息,您可以找到here