写作原因
之前在学校都是做前端,但是最后找了个 Java 后端的工作,框架什么的基本没用过,所以工作中遇到了很多问题,所以决定记录下来工作中遇到的问题,记录成长的点滴。
正文
公司使用的是现在流行的 SpringBoot,数据库方面使用的是 SpringData+JPA+Hibernate。这几天用的最多的就是用 JPA 进行查询了,简单的查询很简单,网上查一查就有一堆方案,直到遇到分页查询的时候出了问题。
网上查到的大多都是使用 EntityManager 通过人工拼接 sql 来查询的,但是今天从导师那里学到了一手,在 Repository 中使用 @Query 注解即可。
代码如下
public interface StudentRepository extends JpaRepository<Student,Integer> {
@Query(
value = "SELECT * FROM student"
+ "WHERE (age = ?1 OR ?1 IS NULL)"
+ "WHERE (id = ?2 OR ?2 IS NULL)"
+ "WHERE (first_name = ?3 OR ?3 IS NULL)"
+ "ORDER BY ?#{#pageable}",
countQuery = "SELECT COUNT(1) FROM"
+ "SELECT * FROM student"
+ "WHERE (age = ?1 OR ?1 IS NULL)"
+ "WHERE (id = ?2 OR ?2 IS NULL)"
+ "WHERE (first_name = ?3 OR ?3 IS NULL)"
+ "ORDER BY ?#{#pageable}",
nativeQuery = true
)
Page<Student> findByAgeAndIdAndFirstName(Integer age, Integer id, String firstName, Pageable pageable);
}
最后的 Pageable
可以使用 PageRequest
来创建。
这里其实主要还是使用了 SQL 的语法,SQL 还是有很多需要去学的。