从头学习Spring之二(数据操作之JPA)

一.O/R Mapping:对象-关系映射:域模型是面向对象的,而关系数据模型是面向关系的,O/R Mapping是建立两者之间的映射

  对象与关系的范式不匹配:

  对象(Object) 关系型数据库(RDBMS)
粒度
继承关系
唯一性 ==或者equals() 主键
关联 引用 外键
数据访问 逐级访问 SQL数量要少

二.Java Persistence API

  为对象关系型映射提供了一种基于POJO的持久化模型

  Hibernate是JPA的一个实现

 

(一) 常用注解

  1.实体:

     @Entity :注明为实体

     @MappedSuperclass :注明为多个实体类的父类

     @Table(name) :关联对应的表

  2.主键:

     @Id :注明字段为主键,有以下参数:

       @GeneratedValue(strategy, generator) :主键生成策略以及对应的生成器

       @SequenceGenerator(name, sequenceName) :指明序列

举例:

 1 @Entity(name = "Product")
 2 // 没有特别注明@Table注解的话,默认类名即表名
 3 public static class Product{
 4 
 5     @Id
 6     @GeneratedValue(
 7                 // 使用SEQUENCE作为生成策略
 8                 strategy = GenerationType.SEQUENCE,
 9                 // 使用的生成器为"sequence-generator"
10                 generator = "sequence-generator"
11     )
12     @SequenceGenerator(
13                 // 定义一个名为"sequence-generator"的生成器
14                 name = "sequence-generator",
15                 // 对应名为"product_sequence"的序列
16                 sequenceName = "product_sequence"
17     )
18     private Long id;
19 
20     @Column(name = "product_name")
21     private String name;
22 
23     // Getter and Setter
24 }     

  3.映射:

     @Column(name, nullable, lenth, insertable, updatable) :注明属性和表字段的映射关系

     @JoinTable(name) 、 @JoinColumn(name) :关联

  4.关系:

     @OneToOne 、 @OnetoMany 、 @ManyToOne 、 @ManyToMany :表关联

     @OrderBy :排序

(二)  Repository 

  1. @EnableJpaRepositories 注解定义当前接口为 Repository 

  2.定义 Repository<T, ID> 接口,在 JavaConfig 上添加 @EnableJpaRepositories 注解后就可自动发现其扩展接口,泛型中指定实体对象和主键类型

  3.定义查询:根据方法名定义查询,如:find...By... / read...By... / query...By... / get...By... / count...By... / ...OrderBy...[Asc/Desc]等

  4.分页查询:使用 PagingAndSortingRepository<T, ID> : findAll() 方法,重载形式1.传入 Sort 类型参数,返回一个迭代器;重载形式2.传入Pageable 类型参数,返回一个 Page 类型数据

(三) Repository 从接口变成 Bean 

  1. JpaRepositoriesRegistrar :

    激活 @EnableJpaRepositories 注解

    返回 JpaRepositoryConfigExtension 类

  2. RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions :

    注册 Repository Bean (类型是 JpaRepositoryFactoryBean )

  3. RepositoryConfigurationExtensionSupport.getRepositoryConfigurations :

    获取 Repository 配置

  4. JpaRepositoryFactory.getTargetRepository :

    创建 Repository 

(四) 解释接口中的方法

  1. RepositoryFactorySupport.getRepository 添加 Advice :

    对 QueryExecutorMethodInterceptor 查询做了增强。

  2. AbstractJpaQuery.execute 执行具体的查询

  3.在 Part 中进行语法解析

 

posted @ 2021-02-18 15:04  xiao_lin  阅读(128)  评论(0编辑  收藏  举报