使用@Query的方式
这种查询可以声明在继承JpaRepository接口方法中,可以在自定义的查询方法上使用@Query,来指定该方法要执行的自定义的查询语句,比如:
例子1:
@Query("select o from UserModel o where =?1")
public List<UserModel> findByUuidOrAge(int uuid);
注意:
1:方法的参数个数必须和@Query里面需要的参数个数一致
2:如果是like,后面的参数需要前面或者后面加“%”,比如下面都对:
@Query("select o from UserModel o where like ?1%")
public List<UserModel> findByUuidOrAge(String name);
或
@Query("select o from UserModel o where like %?1")
public List<UserModel> findByUuidOrAge(String name);
或
@Query("select o from UserModel o where like %?1%")
public List<UserModel> findByUuidOrAge(String name);
当然,这样在传递参数值的时候就可以不加‘%’了,当然加了也不会错
例子2:
还可以使用@Query来指定本地查询,参数nativeQuery = true才是表明了使用原生的sql,只要设置nativeQuery为true,比如:
@Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true)
public List<UserModel> findByUuidOrAge(String name);
注意:当前版本的本地查询不支持翻页和动态的排序
使用命名化参数,使用@Param即可,比如:
@Query(value="select o from UserModel o where like %:nn")
public List<UserModel> findByUuidOrAge(@Param("nn") String name);
例子3:
同样支持更新类的Query语句(delete或update的sql)时,添加@Modifying即可配合,配合@Modifying注解一同使用,则可以完成数据的删除、添加、更新操作,比如:
@Modifying
@Query(value="update UserModel o set =:newName where like %:nn")
public int findByUuidOrAge(@Param("nn") String name,@Param("newName") String newName);
注意:
1:方法的返回值应该是int,表示更新语句所影响的行数
2:在调用的地方必须加事务(可以使用注解方式@Transactional),没有事务不能正常执行