SpringDataJPA-Spring入门学习笔记08

课程内容来自极客时间玩转Spring全家桶,链接如下
https://time.geekbang.org/course/intro/100023501

第五天半

SpringDataJPA概念

为什么会存在OR Mapping这个东西

下表是Object与RDBMS关系
在这里插入图片描述
有了这样的不匹配的背景下,就存在了Hibernate与JDO这种对象关系映射的框架

2006年3.2 Hibernate 成为了JPA的实现,作为 JSR 220 的一部分发布

JPA全称Java Persistence API,为对象关系映射提供了一种基于 POJO 的持久化模型

  • 简化数据持久化代码的开发工作
  • 为 Java 社区屏蔽不同持久化 API 的差异(屏蔽JDO、EJB等)

早期Spring中支持JPA,后被单独拿出到Spring Data中,与Spring Data Common、Spring Data JDBC等,同为Spring Data 模块

定义JPA实体对象

使用注解来定义实体:
JPA 注解
实体

  • @Entity 定义该类是实体
  • @MappedSuperclass 多个实体的类的父类
  • @Table(name) 实体和对应的表关联起来

主键

  • @Id 主键
  • @GeneratedValue(strategy, generator) 生成策略:自增序类、生成器等
  • @SequenceGenerator(name, sequenceName) 生成序列

映射

扫描二维码关注公众号,回复: 12202394 查看本文章
  • @Column(name, nullable, length, insertable, updatable) 定义属性与表里字段的映射关系,一般情况下属性名就是对应字段的名字;也可以在name中指定名字
  • @JoinTable(name)、@JoinColumn(name) 关联时使用

关系

  • @OneToOne、@OneToMany、@ManyToOne、@ManyToMany
  • @OrderBy 排序

Lombok

Project Lombok 能够自动嵌入 IDE 和构建工具,提升开发效率

  • @Getter / @Setter
  • @ToString
  • @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor
  • @Data 相当于 Getter / Setter + ToString
  • @Builder
  • @Slf4j / @CommonsLog / @Log

JPA实现逻辑

Repository Bean 是如何创建的

JpaRepositoriesRegistrar
激活了 @EnableJpaRepositories
返回了 JpaRepositoryConfigExtensio

RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions
注册 Repository Bean(类型是 JpaRepositoryFactoryBean )

RepositoryConfigurationExtensionSupport.getRepositoryConfigurations
取得 Repository 配置

JpaRepositoryFactory.getTargetRepository
创建了 Repository

接口中的方法是如何被解释的

RepositoryFactorySupport.getRepository 添加了Advice
DefaultMethodInvokingMethodInterceptor
QueryExecutorMethodInterceptor

AbstractJpaQuery.execute执行具体的查询

猜你喜欢

转载自blog.csdn.net/weixin_43596589/article/details/112604771