JPA的@Query与@Param注解使用方式 执行原生sql参数是否加@Param 这里明白了

发布时间 2023-07-13 15:30:27作者: sunny123456

JPA的@Query与@Param注解使用方式 执行原生sql参数是否加@Param 这里明白了
原文链接:https://blog.csdn.net/m0_37965811/article/details/123034370

@QueryJPA 中的注解,用于绑定方法和与数据库表有关的操作。

它的查询语法格式分为两种,一种是数据库原生语句,这种方式需要在属性里面显式地将nativeQuery属性设置为true。另一种是 JPA 的语法格式, 这种方式需要搭配@Entity@Table注解使用。

它的参数调用格式也分为两种,一种是通过?+入参坐标的形式来调用,例如:?1。另一种则是通过:+变量名的形式调用,例如::userName。当使用第二种方式时,需要用@Param来对参数名进行映射。

搭配使用

  • @Param:绑定参数。

  • @Entity:定义实体类。value属性定义类名,在 @Query 中使用 JPA 格式的写法时需要使用该值作为实体类名

  • @Table:定义表结构。name属性用于绑定数据库中的表名,若没有该值则默认表名为 Entity 标签中的value值。

注意:在 java 代码中仍通过 java 类名来调用被 @Entity 标注的类。 调用方式:  Java 代码 -----> java 类名  JPA 语法 -----> @Entity 中的value

使用方法

  • 标注于继承了Repository的接口类中的方法上

  • 需要参数的话需要配合@Param注解使用

  • 分为 JPA 语法格式的查询和原生语句语法格式的查询

//原生语句
@Query(value = "select * from User where user_id = :id", nativeQuery = true)
List<User> findUser(@Param(value = "id") String userId);
//这里假定已经定义了一个User类,并且用@Entity(value = "userTable")注解标注过
​
//JPA语法格式
@Query(value = "select u from userTable u where u.userId = :id")
List<User> findUser(@Param(value = "id") String userId);

参数写法

//以原生语句为例,JPA语法格式使用方法相同
​
//方式一
@Query(value = "select * from User where user_id = :id", nativeQuery = true)
List<User> findUser(@Param(value = "id") String userId);
​
//方式二
@Query(value = "select * from User where user_id = ?1 and user_name = ?2", nativeQuery = true)
List<User> findUser(String userId, String userName);
如果使用 1? 2? 这种方式指明了对应参数,可以不加@Param