Spring Jpa Demo
Spring Jpa Demo
- 一套API标准javax.persistence的包下面CURD
- JPQL
- ORM
Spring data
Spring Data Commons
Spring Data Gemfire
Spring Data JPA
Spring Data KeyValue
Spring Data LDAP
Spring Data MongoDB
Spring Data REST
Spring Data Redis
Spring Data For ApacheCassandra
Spring Data For Apache Solr
社区支持的子项目
Spring Data Aerospike
Spring Data Couchbase
Spring Data DynamoDB
Spring Data Elasticsearch
Spring Data Hazelcast
Spring Data Jest
Spring Data Neo4j
Spring Data Vault
Spring Data JPA
Spring Data JPA 1.11的新增功能
改进了与Hibernate5.2的兼容性。支持示例查询的任何匹配模式。分页查询执行优化。支持在存储库查询派生中存在的投影。
由于各个Spring数据模块的起始日期不同,它们大多带有不同的主版本号和次版本号。找到兼容版本的最简单方法是依赖于我们所定义的兼容版本附带的Spring数据发布序列BOM。在Maven项目中,您可以在POM的<dependencyManagement/>部分声明此依赖项。
要学会CrudRepository
interface
标准CRUD功能存储库通常对底层数据存储进行查询。使用Spring数据,声明这些查询将变成一个四步过程:
1.声明接口扩展存储库或其子接口之一,并将其键入应处理的域类和ID类型,如下例所示
interface PersonRepository extends Repository<Person, Long> { … }
2.在接口上声明查询方法
//定义返回list <Person>
interface PersonRepository extends Repository<Person, Long>
{ List<Person> findByLastname(String lastname); }
3.设置Spring以使用JavaConfig或XML配置为这些接口创建代理实例
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @EnableJpaRepositories class Config { … }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa https://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <jpa:repositories base-package="com.acme.repositories"/> </beans>
注入存储库实例并使用它,如下例所示
class SomeClient {
private final PersonRepository repository;
SomeClient(PersonRepository repository)
{ this.repository = repository; }
void doSomething()
{ List<Person> persons = repository.findByLastname("Matthews");
}
}
4.选择型继承方法
@NoRepositoryBean
interface MyBaseRepository<T, ID> extends Repository<T, ID>
{ Optional<T> findById(ID id); <S extends T> S save(S entity); }
interface UserRepository extends MyBaseRepository<User, Long>
{ User findByEmailAddress(EmailAddress emailAddress); }
5.从方法名创建查询
interface PersonRepository extends Repository<Person, Long>
{
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// Enables the distinct flag for the query
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// Enabling static ORDER BY for a query
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
定义排序表达式
Sort sort = Sort.by("firstname").ascending() .and(Sort.by("lastname").descending());