Spring Data JPA 为查询数据库提供了多种方式,既简化了开发,又提供了足够的灵活性。
本文中使用 Spring Boot 构建Rest服务实验手册(一) 中的案例演示JPA的不同查询方法。
认识Repository
在 Spring Data JPA 中,使用 Repository 接口代替了传统的 DAO 对象,其原来其实还是一样的,只是这样做能极大的简化开发。
比如在案例中 TodoRepository 的定义:
1 |
|
通过简单的继承 JpaRepository, 不用写一行代码,就获得了基本的增、删、查、改Todo 对象(表)的能力。
使用 Query Method 定义查询
“Query Method” 是JPA中自动建立查询的一种机制,通过方法名来推断可能的查询参数。
例如,我们在案例中想要通过 Todo 的 Title 字段作为查询条件,就可以在Repository中这样来定义方法:
1 |
|
可以看到,其模式为 findBy<字段名>。 等价的 SQL 为:
1 | select * from TODO t where t.title = ? |
我们也可以查询多个条件,比如要根据 title 和 desc 两个属性来查询,则可以写成:
1 | public List<Todo> findByTitleAndDesc(String title, String desc); |
实际上,JPA中定义了很多这样的对于关系,如下表:
使用HSQL语法进行查询
HSQL是在 Hibernate 中定义的一种查询语法,该语法与 SQL 及其相似,所以使用起来也非常顺手。如果用HSQL实现上面例子中的基于Title来进行查询,则可以定义为:
1 |
|
*需要注意的是,在 “from” 后面,HSQL使用的是对象名,而不是表名**
使用本地SQL进行查询
为活动更好的,更精确的控制,也可以使用本地 SQL 进行查询,以上的例子可以写为:
1 |
|