­

快速学习-Spring Data JPA的查询方式

第4章 Spring Data JPA的查询方式

4.1 使用Spring Data JPA中接口定义的方法进行查询

在继承JpaRepository,和JpaRepository接口后,我们就可以使用接口中定义的方法进行查询

  • 继承JpaRepository后的方法列表
  • 继承JpaSpecificationExecutor的方法列表

4.2 使用JPQL的方式查询

使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询

@Query 注解的使用非常简单,只需在方法上面标注该注解,同时提供一个JPQL查询语句即可

public interface CustomerDao extends JpaRepository<Customer, Long>,JpaSpecificationExecutor<Customer> {      //@Query 使用jpql的方式查询。      @Query(value="from Customer")      public List<Customer> findAllCustomer();        //@Query 使用jpql的方式查询。?1代表参数的占位符,其中1对应方法中的参数索引      @Query(value="from Customer where custName = ?1")      public Customer findCustomer(String custName);  }

此外,也可以通过使用 @Query 来执行一个更新操作,为此,我们需要在使用 @Query 的同时,用 @Modifying 来将该操作标识为修改查询,这样框架最终会生成一个更新的操作,而非查询

    @Query(value="update Customer set custName = ?1 where custId = ?2")      @Modifying      public void updateCustomer(String custName,Long custId);

4.3 使用SQL语句查询

Spring Data JPA同样也支持sql语句的查询,如下:

    /**       * nativeQuery : 使用本地sql的方式查询       */      @Query(value="select * from cst_customer",nativeQuery=true)      public void findSql();

4.4 方法命名规则查询

顾名思义,方法命名规则查询就是根据方法的名字,就能创建查询。只需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作。Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询

按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析。

    //方法命名方式查询(根据客户名称查询客户)      public Customer findByCustName(String custName);

具体的关键字,使用方法和生产成SQL如下表所示