Spring Jpa Demo

Spring Jpa Demo

  • 一套API标准javax.persistence的包下面CURD
  • JPQL
  • ORM

Spring Jpa Demo

 

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

Spring Jpa Demo

Spring Jpa Demo

标准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());