1 JPA

1.1 整体概念

JPA:Java Persistence API,就是java持久化api,是SUN公司推出的一套基于ORM的规范。

ORM呢:Object-Relational Mapping,对象关系映射,简单来说为了不用JDBC那一套原始方法来操作数据库,ORM框架横空出世(mybatis、hibernate等等)。

Spring Data JPA是Spring Data家族的一部分,可以轻松实现基于JPA的存储库。 此模块处理对基于JPA的数据访问层的增强支持。 它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。

总的来说JPA是ORM规范,Hibernate、TopLink等是JPA规范的具体实现,这样的好处是开发者可以面向JPA规范进行持久层的开发,而底层的实现则是可以切换的。Spring Data Jpa则是在JPA之上添加另一层抽象(Repository层的实现),极大地简化持久层开发及ORM框架切换的成本。

1.2 JPA实体生命周期

PostLoad
PostPersist
PostRemove
PostUpdate
PrePersist
PreRemove
PreUpdate
import org.springframework.stereotype.Component;

import javax.persistence.PostPersist;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate; public class TestEntityListeners { @PrePersist
public void PrePersist(Object entity){
System.out.println("开始保存--"+entity.toString());
} @PreUpdate
public void PreUpdate(Object entity){
System.out.println("开始更新--"+entity.toString());
} @PostPersist
public void PostPersist(Object entity){
System.out.println("结束保存--"+entity.toString());
} @PostUpdate
public void PostUpdate(Object entity){
System.out.println("结束更新--"+entity.toString());
} }
@Entity
@Table(name = "product")
@EntityListeners(value = {TestEntityListeners.class})
public class Product {
private int id;
private String productId;
private String productName;
//getter setter toString()
}

2 JpaEntityInformation

JpaEntityInformation entityInformation = JpaEntityInformationSupport.getEntityInformation(clazz, entityManager);

3 Repository

3.1 Repository

  • JpaRepositoryImplementation<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>

    • SPI interface to be implemented by JpaRepository implementations.
    • SPI是串行外设接口(Serial Peripheral Interface)的缩写
  • RevisionRepository<T, ID, N extends Number & Comparable<N>> extends Repository<T, ID>

    • A repository which can access entities held in a variety of Revisions.

    • private final JpaEntityInformation<T, ?> entityInformation;
      private final EntityManager em;
      private final PersistenceProvider provider;
  • public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID>

  • 其他子类:

  • @NoRepositoryBean

3.2 Optional

示例:

    public static void main(String[] args) {
System.out.println("------- 1.get() 若为null会报错");
// Optional<String> empty = Optional.empty();
// System.out.println(empty.get());
/*
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
*/ System.out.println("------- 2.Optional.of()");
// Optional<Object> empty = Optional.of(null);
// System.out.println(empty.get());
/*
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
private Optional(T value) {
this.value = Objects.requireNonNull(value);
} public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
*/ System.out.println("------- 3.Optional.ofNullable()");
// Optional<Object> empty = Optional.ofNullable(null);
// System.out.println(empty.get()); System.out.println("------- 4.Optional.isPresent()");
Optional<Object> empty = Optional.empty();
System.out.println(empty.isPresent()); System.out.println("------- 5.Optional.ifPresent()");
Optional<String> optional = Optional.of("haha");
optional.ifPresent(str -> System.out.println("参数有值时打印:" + str)); System.out.println("------- 6.Optional.filter()");
boolean present = optional.filter(str -> "hehe".equals(str)).isPresent();
System.out.println(present); System.out.println("------- 7.Optional.map()");
Optional<String> optional2 = optional.map(str -> str.toUpperCase());
System.out.println(optional2.get()); System.out.println("------- 8.Optional.flatMap()");
Optional<String> s = optional.flatMap(str -> Optional.ofNullable(str.toUpperCase()));
System.out.println(s.get()); System.out.println("------- 9.Optional.orElse()");
Object haha = Optional.empty().orElse("haha");
System.out.println(haha); System.out.println("------- 10.Optional.orElseGet()");
Object o = Optional.empty().orElseGet(() -> Math.random());
System.out.println(o); System.out.println("------- 11.Optional.orElseThrow()"); }

3.3 Limit Query

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

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

3.4 Null

3.5 Asynchronous Query Results

SpringData JPA接口总结的更多相关文章

  1. SpringData JPA 接口和方法

    1.1 简单查询--接口方法 1.2 五个接口详解 1.2.1    CrudRepository接口 其中T是要操作的实体类,ID是实体类主键的类型.该接口提供了11个常用操作方法. @NoRepo ...

  2. Spring、SpringMVC、SpringData + JPA 整合详解

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...

  3. 【极简版】SpringBoot+SpringData JPA 管理系统

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...

  4. 带你搭一个SpringBoot+SpringData JPA的环境

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...

  5. 6.4 SpringData JPA的使用

    引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...

  6. 尚硅谷springboot学习34-整合SpringData JPA

    SpringData简介

  7. 一篇 SpringData+JPA 总结

    概述 SpringData,Spring 的一个子项目,用于简化数据库访问,支持 NoSQL 和关系数据库存储 SpringData 项目所支持 NoSQL 存储 MongDB(文档数据库) Neo4 ...

  8. SpringBoot整合SpringData JPA入门到入坟

    首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...

  9. Springboot集成SpringData JPA

    序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...

随机推荐

  1. 什么是 WebSockets?

    WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道. 1.WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送. 2.WebSock ...

  2. springboot 设定访问项目的根路径

    springboot的配置文件application.yml: spring.mvc.view.prefix : / spring.mvc.view.suffix : .html server: po ...

  3. Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?

    可以继承其他类或实现其他接口,在 Swing 编程和 Android 开发中常用此方式来 实现事件监听和回调.

  4. 比较一下 Java 和 JavaSciprt?

    JavaScript 与 Java 是两个公司开发的不同的两个产品.Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序 开发:而 JavaSc ...

  5. 走在 SVG + Low Poly 的路上

    随着 SVG 的发展,艺术家和设计师们把越来越多传统设计行业的东西引入了前端, low poly 就是其中之一.那 low poly 强大在哪呢,大家通过下面的图来感受一下. 恰巧我们产品 Logo ...

  6. 体验javascript之美第五课 五分钟彻底明白 匿名函数自执行和闭包

    通过文你将学到: 1.闭包是怎么回事儿? 2.闭包的原理和在jquery中的应用 3.从一到面试题彻底理解闭包和垃圾回收机制 4.闭包在jquery中的应用 概述 经常听到闭包这个词儿,或者匿名函数自 ...

  7. TypeScript中变量调用时后缀感叹号和问号的区别

    typescript编译时,当我们开启严格模式时,下面的代码就会报错: function doSomething(x: string | null) { console.log("Hello ...

  8. Python中用类实现对象和封装

    """ 用类实现对象和封装 对象:对应客观世界的事物,将描述事物的一组数据和与这组数据有关的操作封装在一起, 形成一个实体,这个实体就是对象 类:具有相同或相似性质的对象 ...

  9. C++---变量、数据类型和运算符

    内存 计算机使用内存来记忆或存储计算时所使用的的数据. 计算机执行程序时, 组成程序的指令和程序所操作的数据都必须存放在某个地方, 而这个地方就是计算机的内存, 也称为主存, 或随机访问存储器(RAM ...

  10. Java当中的HashSet

    package collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /* * ...