Spring-Data JPA自定义sql查询操作~

1,383 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战

1、使用JPQL的方式查询

JPQL概述:

JPQL语言,即 Java Persistence Query Language 的简称。JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查询,从而屏蔽不同数据库的差异。JPQL语言的语句可以是 select 语句、update 语句或delete语句,它们都通过 Query 接口封装执行。

jpql详细语法规则待以后补充完整~

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

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

public interface CustomerDao extends 
JpaRepository<Customer,Long>,JpaSpecificationExecutor<Customer> {   

    @Query(value="from Customer")
    public List<Customer> findAllCustomer();

    @Query(value="from Customer where custName = ?1")
    public Customer findCustomer(String custName);
}

说明:

  • @Query:该注解表示执行被标注的方法时,使用自定义的jpql语句方式查询。

  • @Query:?1代表参数的占位符,其中1对应方法中的参数索引,所以在传递参数时需要注意参数顺序。

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

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

2、使用SQL语句查询

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

    @Query(value="select * from cst_customer",nativeQuery=true)
    public void findSql();

说明:

  • nativeQuery:表示是否使用本地sql的方式查询。

明天继续加油!