SpringData JPA接口总结
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接口总结的更多相关文章
- SpringData JPA 接口和方法
1.1 简单查询--接口方法 1.2 五个接口详解 1.2.1 CrudRepository接口 其中T是要操作的实体类,ID是实体类主键的类型.该接口提供了11个常用操作方法. @NoRepo ...
- Spring、SpringMVC、SpringData + JPA 整合详解
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...
- 【极简版】SpringBoot+SpringData JPA 管理系统
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...
- 带你搭一个SpringBoot+SpringData JPA的环境
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...
- 6.4 SpringData JPA的使用
引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...
- 尚硅谷springboot学习34-整合SpringData JPA
SpringData简介
- 一篇 SpringData+JPA 总结
概述 SpringData,Spring 的一个子项目,用于简化数据库访问,支持 NoSQL 和关系数据库存储 SpringData 项目所支持 NoSQL 存储 MongDB(文档数据库) Neo4 ...
- SpringBoot整合SpringData JPA入门到入坟
首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...
- Springboot集成SpringData JPA
序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...
随机推荐
- 202A 202B 202C 202D 202E字符的作用及解释
这里你会发现在值的前后有2个\u开头的控制字符:转换网址:http://www.jsons.cn/utf8/ 解释:https://blog.csdn.net/haiyan1111/article/d ...
- Java并发机制(3)--volatile关键字与内存模型
Java并发编程:volatile关键字解析及内存模型 个人整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920373.html 1.线程内存模型: ...
- 说出几点 Java 中使用 Collections 的最佳实践?
这是我在使用 Java 中 Collectionc 类的一些最佳实践: a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector. b)优先使用并发集合,而不是对 ...
- SQLAlchemy 使用教程
前戏: 不用怀疑,你肯定用过Django中的orm,这个orm框架是django框架中自己封装的,在Django中配置和使用较为简单,但是并不适用于其他web框架,而今天说的sqlalchemy是 ...
- c语言 相关小知识
软件运行与内存关系(垃圾数据) 内存是在操作系统的统一管理下使用的! 1.软件在运行前需要向操作系统申请访问存储空间,在内存空闲空间足够时,操作系统将分配一段内存空间并将外存中软件拷贝一份存入该内存空 ...
- python中一切皆对象的理解
一切皆对象? 学过Java都知道,Java中有8个基本类型,其余的都是继承自Object类的引用类型.方法内的基本类型变量会在栈上分配,而引用类型会通过逃逸分析来决定在栈上分配或堆上分配.Java中关 ...
- C++ | 再探智能指针(shared_ptr 与 weak_ptr)
上篇博客我们模拟实现了 auto_ptr 智能指针,可我们说 auto_ptr 是一种有缺陷的智能指针,并且在C++11中就已经被摈弃掉了.那么本章我们就来探索 boost库和C++11中的智能指针以 ...
- HTML5离线存储整理
前端html部分 //canvas.html <!DOCTYPE html> <html manifest="/test.appcache"> <he ...
- 定制卡牌式 banner
HTML <template> <view > <swiper class='swiperClass' autoplay interval="2000" ...
- Static in C++
Static in C++ static根据上下文会有两种含义,他们的区别如下 **在类class或者是在结构体struct 外 **使用static 类外的static修饰的符号在link阶段是局部 ...




