深入了解Spring(第四天)

JPA

使用JPA的ORM快速入门

什么是ORM/

因为要满足Java对象得到持久化(即保存)的需要。

ORM:(Object/Relation  Mapping):对象/关系映射

ORM的实现思想:

将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化对对象的操作

因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作

在原来Java对数据库的访问是通过JDBC

JPA概述

Java Persistence API(JPA)即持久层API,是一种Java应用程序编程接口规范,它描述了再使用Java平台标准版和Java平台企业版的应用程序中管理关系数据

 在Spring中JPA的配置

步骤:

  1. 启用先前定义的JPA注解通过 EntityManager连接到ORM后端。
  2. 启用Hibernate作为ORM的后端。Hibernate将被连接到的自动配置的数据源上
  3. 使用“@EnableJpaRepositories”注解启用对JPA存储库的扫描
  4. 设置一个‘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注解来覆盖这些设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值