SpringData JPA Dao注解的使用

版权声明:技术交流群:758191639 作者支付宝18696232390喜欢的可以打钱! https://blog.csdn.net/u014131617/article/details/85813630

1.@Query详解

在这里插入图片描述

@Query用法

声明个查询方法

在这里插入图片描述

模糊查询

在这里插入图片描述

原生SQL查询

在这里插入图片描述

@Query排序

@Query在JPQL下想实现排序,直接用PageRequest或者直接用Sort参数都可以。
在排序实例中实际使用的属性需要与实体模型里面的字段相匹配,这意味着它们需要解析为查询中使用的属性或别名。这是一个state_field_path_expression JPQL定义,并且Sort的对象支持一些特定的函数。
在这里插入图片描述

@Query分页

在这里插入图片描述

对原生SQL(以MySQL为例)的分页支持示例,但是支持得不是特别友好。
在这里插入图片描述
在这里插入图片描述


2.@Param

默认情况下,参数是通过顺序绑定在查询语句上的。这使得查询方法对参数位置的重构容易出错。为了解决这个问题,你可以使用@ Param注解指定方法参数的具体名称,通过绑定的参数名字做查询条件。
在这里插入图片描述


3.@Modifying

在这里插入图片描述
可以通过在@Modifying注解实现只需要参数绑定的update查询的执行:
在这里插入图片描述
对删除也同样支持
在这里插入图片描述


4.@QueryHints

有很多数据库支持Hint Query的语法,不过这种查询支持比较老旧,感觉应该会慢慢被淘汰,工作中很少有人使用。Spring Data JPA还是做了很好的支持,它只支持一些固定的HintValue值,用来优化Query的作用。有两个注解需要了解和知道一下@QueryHints, value等于多个@QueryHint。
在这里插入图片描述
QueryHint仅仅了解一下即可,一般的业务场景基本不用。


5.@Procedure

JPA对储存过程的支持
源码:
在这里插入图片描述

首先创建一个储存过程名字plus1inout

在这里插入图片描述
使用@NamedStoredProcedureQueries注释来调用存储过程。这个必须定义在一个实体上面。
在这里插入图片描述

存储过程使用了注释@NamedStoredProcedureQuery,并绑定到一个JPA表。

procedureName是存储过程的名字。

name是JPA中存储过程的名字。

使用注释@StoredProcedureParameter来定义存储过程使用的IN/OUT参数。

直接通过自定义过的Repository完成储存过程的调用。
在这里插入图片描述

@Procedure的procedureName参数必须匹配

  • @NamedStoredProcedureQuery的procedureName。
  • @Procedure的name参数必须匹配@NamedStoredProcedureQuery的name。
  • @Param必须匹配@StoredProcedureParameter注释的name参数。
  • 返回类型必须匹配:in_only_test存储过程返回是void, in_and_out_test存储过程必须返回String。

6.@NamedQueries预定义查询

1.在@Entity下增加@NamedQuery定义。

在这里插入图片描述

需要注意,query里面的值也是JPQL。查询参数也要和实体对应起来。因为实际场景中这种破坏Entity的侵入式很不美,也不方便,所以这种方式容易遗忘,工作中也很少推荐。

与之相对应的还有@NamedNativeQuery。用法一样,唯一不
一样的是,query里面放置的是原生SQL语句,而非实体的字段名字

用法举例

实体类

在这里插入图片描述

CustomerRepository里面的写法:

在这里插入图片描述

调用者的写法:

在这里插入图片描述

@NamedQuery、@Query和方法定义查询的对比

  • 1)Spring JPA里面的优先级,@Query > @NameQuery > 方法定义查询。
  • 2)推荐使用的优先级:@Query > 方法定义查询 > @NameQuery。
  • 3)相同点是都不支持动态条件查询。

猜你喜欢

转载自blog.csdn.net/u014131617/article/details/85813630