zoukankan      html  css  js  c++  java
  • 从头学习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 中进行语法解析

  • 相关阅读:
    phpspider爬虫框架的使用
    【php设计模式】责任链模式
    【php设计模式】策略模式
    【php设计模式】观察者模式
    【php设计模式】模板模式
    【温故知新】php 魔术方法
    【php设计模式】享元模式
    Java50道经典习题-程序18 乒乓球赛
    Java50道经典习题-程序19 输入行数打印菱形图案
    Java50道经典习题-程序20 求前20项之和
  • 原文地址:https://www.cnblogs.com/xiao-lin-unit/p/14411866.html
Copyright © 2011-2022 走看看