JPA
使用JPA的ORM快速入门
什么是ORM/
因为要满足Java对象得到持久化(即保存)的需要。
ORM:(Object/Relation Mapping):对象/关系映射
ORM的实现思想:
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化对对象的操作
因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作
在原来Java对数据库的访问是通过JDBC
JPA概述
Java Persistence API(JPA)即持久层API,是一种Java应用程序编程接口规范,它描述了再使用Java平台标准版和Java平台企业版的应用程序中管理关系数据
在Spring中JPA的配置
步骤:
- 启用先前定义的JPA注解通过 EntityManager连接到ORM后端。
- 启用Hibernate作为ORM的后端。Hibernate将被连接到的自动配置的数据源上
- 使用“@EnableJpaRepositories”注解启用对JPA存储库的扫描
- 设置一个‘TransactionManager’,并用‘@EnableTransactionManager’来启用事务
EntityManager
EntityManager是JPA中用于增删改查的接口,它的作用相当于一座桥梁,连接内存中的java对象和数据库的数据存储。定义方法
EntityManagerFactoryBean
实现了EntityManager的就是实现了JPA的厂商,例如Hibernate等等
获取EntityManager对象的方式:可以通过EntityManagerFactoryBean来进行对象管理
EntityManagerFactoryBean管理EntityManager的方式有两种:a容器托管的 b应用托管的
容器托管的对象最为简单,编程人员不需要考虑EntityManager的连接,释放以及复杂的事务问题等等
LocalContainerEntityManagerFactoryBean
容器管理类型
这种类型最适合希望不考虑persistence.xml中的特殊性而在JPA配置之上维持某种控制的Java EE容器
Spring Boot与JPA
如果JPA在classpath上,Spring Boot会自动
- -自动配置一个DataSource
- -自动配置一个EntityManagerFactoryBean
- -自动配置一个JpaTransactionManager
JPA的常用注解
Spring Data理念
为NoSQL数据库提供类似Spring对RDBMS的支持 使用模板类以隐藏低级、重复的代码 常见的数据访问异常
此外,还可以为你实现存储库的功能 我们将展示JPA 适用于MongoDB、Gemfire、Neo4j等
Spring Boot集成测试框架
什么是Spring Boot测试框架
构建在Spring测试框架之上
提供一组用于测试的注解和工具
使用spring-boot-starter-test的测试依赖项
- JUnit:默认的版本是JUnit 5(从Spring Boot 2.2版本开始)
- Spring Test和Spring Boot Test:测试注解
- AssertJ:一个断言库 Hamcrest:一个匹配库
- Mockito:一个Java模拟框架
- JSONassert:一个用于JSON的断言库
- JsonPath:用于JSON的XPath
使用@SpringBootTest进行集成测试
自动搜索@SpringBootConfiguration
- 作为@ContextConfiguration的替代方案,用于创建测试使用的应用程序上下文
- 使用@SpringBootTest进行集成测试,使用@ContextConfiguration进行分片测试
提供对不同webEnvironment模式的支持 (RANDOM_PORT,DEFINED_PORT,MOCK,NONE)
由测试框架启动嵌入式服务器 集成测试可以作为CI/CD管道的一部分来完成
自动配置一个TestRestTemplate
用@ExtendWith(从Spring Boot 2.2开始)进行元注解
使用TestRestTemplate进行集成测试
方便的适用于集成测试的RestTemplate的替代品
- 采取相对路径(而不是绝对路径)
- 容错性:当从服务器应用程序收到404等错误响应时,它不会抛出一个异常
- 配置为忽略cookies和重定向
依赖的 @Mock 与 @MockBean
@Mock 来自Mockito框架 当不需要Spring上下文时使用它
@MockBean 来自Spring Boot框架 当需要Spring上下文时使用它 当Spring上下文中不存在模拟Bean时,创建一个新的模拟Bean,或者当存在模拟Bean时,用一个模拟Bean替换一个Bean
@DataJpaTest进行存储库切片测试
- 可用于测试只关注JPA组件的情况下 加载@Repository beans,不包括其它 @Components
- 自动配置TestEntityManager 用于JPA测试的EntityManager的替代品 提供了EntityManager方法的一个子集 只是那些对测试有用的 常见测试任务的辅助方法,如persistFlushFind()、persistAndFlush()
- 使用一个嵌入式内存数据库 取代任何显式或自动配置的数据源 可以使用@AutoConfigureTestDatabase注解来覆盖这些设置