spring-data-jpa知识点

本文详细介绍了Spring Data JPA中的核心概念,包括JPA与Hibernate的关系、Repository接口与实现、自定义查询方法、查询关键字、分页排序、空与非空注解、异步操作以及事务管理等关键知识点。
摘要由CSDN通过智能技术生成

介绍

  1. JPA:Java Persistence API:就是java持久化api,是SUN公司推出的一套基于ORM的规范
  2. ORM:Object Relational Mapping,即对象关系映射。
  3. hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,是JPA的实现
  4. jpa与hibernate关系:在这里插入图片描述
  5. spring-data的主要子项目:在这里插入图片描述

环境

maven:

<dependencies>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
  </dependency>
<dependencies>

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

知识

七个Repository接口:

  1. Repository
  2. CrudRepository
  3. PagingAndSortingRepository
  4. QueryByExampleExecutor
  5. JpaRepository
  6. JpaSpeccificationExecutor
  7. QueryDslPredicateExecutor

两个实现类:

  1. SimpleJpaRepository
  2. QueryDslJpaRepository

接口图:
在这里插入图片描述
CrudRepository主要方法:

public interface CrudRepository<T, ID> extends Repository<T, ID> {
   

  <S extends T> S save(S entity);      

  Optional<T> findById(ID primaryKey); 

  Iterable<T> findAll();               

  long count();                        

  void delete(T entity);               

  boolean existsById(ID primaryKey);   

  // … more functionality omitted.
}

PagingAndSortingRepository主要方法:

public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
   

  Iterable<T> findAll(Sort sort);

  Page<T> findAll(Pageable pageable);
}

分页方法:

PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));

自定义的Repository(一定要加@NoRepositoryBean):

@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);
}

自定义查询方法:

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);
}

查询关键字:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#appendix.query.method.subject
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据内嵌实体类查询(Person类有个Address类,Address类里有个ZipCode类):

List<Person> findByAddress_ZipCode(ZipCode zipCode);

分页、排序方法:

Page<User> findByLastname(String lastname, Pageable pageable);

Slice<User> findByLastname(String lastname, Pageable pageable);

List<User> findByLastname(String lastname, Sort sort);

List<User> findByLastname(String lastname, Pageable pageable);

排序方法:

Sort sort = Sort.by("firstname").ascending()
  .and(Sort.by("lastname")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值