Spring Data JPA Query 语句查询
使用关键字方式的查询,在面对很多字段或者条件的时候显得过于冗长,使用@Query语句的方式也是一直相对清晰的查询。
演示的版本:
- Spring Boot 2.1.1.RELEASE
- My SQL 8.*
- JDK 1.8 +
方式
使用(Query)语句查询可以在(Entity)类、(Repository)方法和xml去配置查询语句。JPA语句查询和直接使用Hibernate
的HQL
类似,几乎没有什么太大的差别。
Entity类上面
首先,在Entity类上面添加@NamedQuery
注解,在其里面添加名称和语句, 最后在Repository里面去声明其方法的名称。
1 2 3 4 5
| @Entity @NamedQuery(name = "Person.findByFirstName", query = "select p from Person p where p.firstName = ?1 and salary>2000 ") public class Person {
}
|
1
| List<Person> findByFirstName(String firstName);
|
这时候,虽然查询方法的名称和关键字类型,但是实际运行会以运行语句查询。
Repository方法上面
通过在方法什么添加@Query
注解,然后添加语句。
1 2
| @Query("from Person where lastName=?1 and salary>1000") List<Person> findByLastName(String lastName);
|
1 2
| @Query("select count(*) from Person where lastName=?1 and salary>1000") int countByLastName(String lastName);
|
1 2
| @Query("select p from Person p where p.firstName like %?1") List<Person> findByFirstnameEndsWith(String firstName);
|
xml中配置
在META-INF
下面创建orm.xml
配置对应的名称和语句:
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" version="2.0">
<named-query name="Person.findByName"> <query>select p from Person p where p.firstName = ?1 or p.lastName=?2 and salary>1000</query> </named-query>
</entity-mappings>
|
原生SQL
原生语句的SQL使用,只是有微小的配置差别:
- 在类上
使用 @NamedNativeQuery
替代 @NamedQuery
Repository 方法上面
在使用@Query
属性中,配置”nativeQuery = true”
1 2
| @Query(value="select * from Person where first_name = ?1", nativeQuery = true) List<Person> findByFirstNameNative(String firstName);
|
- XML
“” 替换成“”
项目地址
完整演示代码可以通过GitHub : spring-boot-jpa-query
Author:
Darren Du
License:
Copyright (c) 2019 MIT LICENSE