SpringBoot之Jpa查询
1.in查询
使用SpringBoot Jpa进行in查询,有两种方式,一种就是使用@Query自定义查询,一种就是使用Specification定义查询语句,这种方式我就不写了,在另一篇文章(Post not found: Spring Boot之Jpa动态SQL语句 Spring Boot之Jpa动态SQL语句) 中有部分代码。
1 | public interface SiteinfoRepo extends JpaRepository<SiteInfo,Long>, JpaSpecificationExecutor { |
1.jpa Query查询,时间查询,in查询(Spring Data Jpa 3) (这篇文章的中部,有使用@Query定义in查询的方法)
2.@Query注解的用法(Spring Data JPA)
2.分页查询
在SQL server中没有limit方法,实现分页查询就比较麻烦,除此之外,除了要获取分页信息,还要获取数据总量,所以要进行两次查询。刚开始我想着使用一个查询,同时获取分页信息及数据总量,主要就是将数据总量作为一个列,附加在查询结果的后面返回,比如下面的代码,主要使用了 row_number() over 和 COUNT (*) OVER () AS total 两个方法,然后再将数据一一对应
1 |
|
在参考文章中,定义了一种,使用@Query进行分页查询的方法,可以在@Query中定义一个countQuery额外的查询,就可以同时使用jpa自带的分页操作了。
1 | // 定义分页方法 |
但是这样做会执行两次查询,这个要注意。比如下面的内容,就要定义两次where才能获取正确的totalElements
1 |
|
1.Spring Data JPA @Query (这是官方的对于@Query的解释,里面涉及到了分页查询,集合查询in,索引方式查询以及命名方式查询等,仔细阅读,可以解决我以前在使用jpa的时候,出现的很多的不解)
2.Spring Data JPA实现分页Pageable的实例代码
3.hibernate分页原理
4.使用 JPQL 和原生 SQL 查询 JPA 实体
5.复杂sql——分页查询同时查出数据总量 (这篇文章中提到了COUNT (1) OVER ()这个方法)
问题
(1)’offset’ 附近有语法错误
在使用@Query进行自定义分页查询的时候,出现了这个问题。
主要原因应该时数据库方言的问题,sql server 2008版本中没有offset fetch next方法实现的分页,所以应该将hibernate方言定义为org.hibernate.dialect.SQLServer2008Dialect 而不是org.hibernate.dialect.SQLServer2012Dialect。
但是话有说回来了,使用SQLServer2008Dialect方言,会带来一个分页比较慢的问题,就像参考文章2一样,hibernate默认使用的是top方式查询的分页,而不是row_number的方式,所以会拖慢程序。
1.sqlsever2012使用pageHelper分页插件报错解决
2.解决hibernate对Sql Server分页慢的问题 (这里重写了hibernate的底层方言,使用了ROW_MUBBER()函数进行快速的查询)
(2) Could not locate ordinal parameter [1], expecting one of
解决了分页查询的方言问题之后,出现了无法定位参数的问题,显示这三个参数都没有找到。
最后将位置参数,改为了命名参数
1 | // 正确的查询语句 |