07 Spring Data JPA查询操作2

本文详细介绍了Spring Data JPA中@Query注解的使用,包括源码解析、查询、排序和分页操作。此外,还讨论了@Param、SpEL表达式、@Modifying修改查询、@QueryHints、@Procedure存储过程查询以及预定义查询@NamedQueries的使用方法,提供了一系列示例来说明这些高级查询功能。
摘要由CSDN通过智能技术生成

Spring Data JPA查询操作2

注解查询时我们在查询操作中很少用到查询操作,因为Spring Data JPA基本自带的已经帮我们完成了很多复杂的查询,但是在开发中又会遇到各种意料之外的操作,所以这里介绍注解操作,扩展性非常强大(更加支持原生的SQL语法)。

@Query注解

@Query源码及解释

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.data.annotation.QueryAnnotation;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@QueryAnnotation
@Documented
public @interface Query {
    /*
        指定JPQL的查询语句。
            当nativeQuery=true时,此处的value可以替换成原生sql
     */
    String value() default "";

    /*
        指定count的JPQL语句,如果不指定将根据query自动生成
     */
    String countQuery() default "";

    /*
        根据哪个字段来count,一般默认即可
     */
    String countProjection() default "";

    /*
        默认为false,表示value里面是不是原生的sql语句
     */
    boolean nativeQuery() default false;

    /*
        可以指定一个query的名称,必须是唯一的。
            如果不指定,默认的生成规则是:{$domainClass}.{$queryMethodName}
     */
    String name() default "";

    /*
        可以指定一个count的query名字,必须是唯一的
            如果不指定,默认的生成规则是:{$domainClass}.{$queryMethodName}.count
     */
    String countName() default "";
}

@Query用法

使用命名查询方法为实体声明查询是一种有效的方法,对于少量查询很有效。一般只需要关心@Query里面的value和nativeQuery的值。使用声明式JPQL查询有一个好处,就是启动的时候可以知道语法正确与否。

示例1:声明一个注解在Repository的查询方法上

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

/**
 * TODO
 *
 * @author: Yizq
 * @data: 2020/8/23 4:40 下午
 */

public interface UserRepository extends JpaRepository<User,Long> {
    @Query("select u from User u where u.email = ?1")
    User findByEmail(String email);
}

示例2:Like查询,注意firstName不会自动加上%关键字的

public interface UserRepository extends JpaRepository<User,Long> {
    @Query("
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值