Spring Data JPA支持JPQL语法,可以使用注解的方式自定义查询语句,可以使用sql原生的语法,也可以使用JPQL语法,我们使用@Query注解的value和nativeQuery的值。使用声明式的JPQL语句,可以在启动项目的时候就知道语法是否正确,语法错误额时候启动就会报错。
工具/原料
IntelliJ IDEA
方法/步骤
1
首先,声明的注解在Repository的查询方法上,例如 select u from User u 我们可以看出和原生sql有些不同之处,另外也支持 大于小于等查询select u from User u where u.age > 30。
2
使用注解实现模糊查询,注意模糊查询的字段不会自动加上%关键字的,需要在查询语句上手动去拼接,查询条件的写法也需要注意。
3
另外,也支持原生的sql查询,只需要设置nativeQuery = true即可。nativeQuery 是不支持直接传Sort参数进行排序的,我们直接在sql中使用order by进行排序,模糊查询中%的拼接还可以使用concat关键字。
4
@Query注解在JPQL的情况下,可以使用PageRequest或者Sort参数,排序的字段需要和Entity实体类中的字段名称相匹配。使用Page对象进行接收的时候,参数直接传Pageable即可。
5
对原生sql的分支支持不太好用,注意在下图中#pageable#是必须的,查询和计数count要分开写,分别写两条sql语句,使用起来比较麻烦,不太建议这么做,会让接收代码的人很难看懂,这种情况下就可以考虑将结果查出后手动分页了。
6
@Param注解的使用,一般情况下方法的传参是通过顺序绑定的方式进行的,传参时很容易弄错参数的位置,使用@Param注解可以绑定参数传参时的具体名称,非常实用。
7
最后再介绍一下@Modifying注解,该注解的作用是修改和删除,配合@Query注解,使用JPQL或者原生sql进行操作,代码如下图所示。
注意事项
注意JPQL和原生sql语法的区别。