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

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

  • 继承JpaRepository后的方法列表
  • java jpa查询接口model jpa查询数据_java jpa查询接口model

  • 继承JpaSpecificationExecutor的方法列表
  • java jpa查询接口model jpa查询数据_JPA_02

** 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);

3 使用SQL语句查询

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

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

4 方法命名规则查询

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

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

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

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

Keyword   Sample	JPQL		
And	      findByLastnameAndFirstname	… where x.lastname = ?1 and x.firstname = ?2		
Or	      findByLastnameOrFirstname	… where x.lastname = ?1 or x.firstname = ?2		
Is,Equals findByFirstnameIs,
findByFirstnameEquals	… where x.firstname = ?1		
Between	  findByStartDateBetween	… where x.startDate between ?1 and ?2		
LessThan  findByAgeLessThan	… where x.age < ?1		
LessThanEqual	findByAgeLessThanEqual	… where x.age ⇐ ?1		
GreaterThan	findByAgeGreaterThan	… where x.age > ?1		
GreaterThanEqual	findByAgeGreaterThanEqual	… where x.age >= ?1		
After	findByStartDateAfter	… where x.startDate > ?1		
Before	findByStartDateBefore	… where x.startDate < ?1		
IsNull	findByAgeIsNull	… where x.age is null		
IsNotNull,NotNull	findByAge(Is)NotNull	… where x.age not null		
Like	findByFirstnameLike	… where x.firstname like ?1		
NotLike	findByFirstnameNotLike	… where x.firstname not like ?1		
StartingWith	findByFirstnameStartingWith	… where x.firstname like ?1 (parameter bound with appended %)		
EndingWith	findByFirstnameEndingWith	… where x.firstname like ?1 (parameter bound with prepended %)		
Containing	findByFirstnameContaining	… where x.firstname like ?1 (parameter bound wrapped in %)		
OrderBy	findByAgeOrderByLastnameDesc	… where x.age = ?1 order by x.lastname desc		
Not	findByLastnameNot	… where x.lastname <> ?1		
In	findByAgeIn(Collection ages)	… where x.age in ?1		
NotIn	findByAgeNotIn(Collection age)	… where x.age not in ?1		
TRUE	findByActiveTrue()	… where x.active = true		
FALSE	findByActiveFalse()	… where x.active = false		
IgnoreCase	findByFirstnameIgnoreCase	… where UPPER(x.firstame) = UPPER(?1)