Spring Data JPA中的@Query注解使用方式

使用@Query的方式

       这种查询可以声明在继承JpaRepository接口方法中,可以在自定义的查询方法上使用@Query,来指定该方法要执行的自定义的查询语句,比如:

例子1:

@Query("select o from UserModel o where o.uuid=?1")

public List findByUuidOrAge(int uuid);

注意:

1:方法的参数个数必须和@Query里面需要的参数个数一致

2:如果是like,后面的参数需要前面或者后面加“%”,比如下面都对:

@Query("select o from UserModel o where o.name like ?1%")

public List findByUuidOrAge(String name);

@Query("select o from UserModel o where o.name like %?1")

public List findByUuidOrAge(String name);

@Query("select o from UserModel o where o.name like %?1%")

public List findByUuidOrAge(String name);

当然,这样在传递参数值的时候就可以不加‘%’了,当然加了也不会错

例子2:

还可以使用@Query来指定本地查询,参数nativeQuery = true才是表明了使用原生的sql,只要设置nativeQuery为true,比如:

@Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true)

public List findByUuidOrAge(String name);

注意:当前版本的本地查询不支持翻页和动态的排序

使用命名化参数,使用@Param即可,比如:

@Query(value="select o from UserModel o where o.name like %:nn")

public List findByUuidOrAge(@Param("nn") String name);

例子3:

同样支持更新类的Query语句(delete或update的sql)时,添加@Modifying即可配合,配合@Modifying注解一同使用,则可以完成数据的删除、添加、更新操作,比如:

@Modifying

@Query(value="update UserModel o set o.name=:newName where o.name like %:nn")

public int findByUuidOrAge(@Param("nn") String name,@Param("newName") String newName);

注意:

1:方法的返回值应该是int,表示更新语句所影响的行数

2:在调用的地方必须加事务(可以使用注解方式@Transactional),没有事务不能正常执行

你可能感兴趣的:(Spring Data JPA中的@Query注解使用方式)