Spring Data JPA @Query 上

目录

概述

Select Query

JPQL

Native SQL

Order Query

JPQL

Native SQL


Spring Data提供了多种方式来执行一次数据库请求,其中一个非常有用的就是@Query注解,这篇文章我将展示如何使用@Query注解来执行JPQL和native SQL。

查询

Query注解的value是我们将要执行的JPQL或者是SQL。

JPQL

默认情况下,请求使用JPQL,下面的例子演示了如何从数据库中查询所有用户

@Query("SELECT u FROM User u")
Collection<User> findAllUsers();

Native SQL

@Query(
  value = "SELECT * FROM USERS u", nativeQuery = true)
Collection<User> findAllUsersNativeSQL();

注意:我们在@Query注解中设置了nativeQuery = true。注意⚠️区别。

排序

当我们需要使用排序方法的时候我们可以额外给定一个参数Sort用来实现排序查询。使用之后其实就是在查询末尾增加了order by ...

幸运的是JPA已经帮我们实现了一些方法,需要注意的是由于我们使用的是Spring Data 默认提供的方法,在进行排序的时候我们只能使用Entity中定义的属性,例如:

userRepository.findAll(Sort.by(Sort.Direction.ASC, "name"));

JPQL

同样我们定义一个方法,此方法接收一个Sort参数

@Query(value = "SELECT u FROM User u")
List<User> findAllUsers(Sort sort);

我们可以使用name对查询结果进行排序

userRepository.findAllUsers(Sort.by("name"));

JpaSort.unsafe()是Spring Data JPA提供的一个方法,它会绕过Spring Data JPA执行的一些安全检查,在使用时应谨慎,因为在启动的时候并不会检查,所以使用的时候需要当心,防止出现事故的风险。

userRepository.findAllUsers(JpaSort.unsafe("LENGTH(name)"));

Native SQL

当使用Native SQL的时候,我们不能够使用Sort。

org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodException: Cannot use native queries with dynamic sorting and/or pagination

同样,当进行分页查询的时候如果使用Native SQL也会出现类似的错误

下篇文章我们将进行分析。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值