Spring Data JPA (1) 注解

Spring Data JPA (1) 注解
 
  • 简单概述
    • JPA提供了大量的注解,用于映射实体类到数据库中
    • 在Mybatis中,注解主要使用XML来映射
  • JPA的常见注解
    • @Entity 把一个实体类映射到数据库中
      • name属性,在JPQL中实体类的名字,若不填,默认为类的名称
    • @Table 实体类和数据库中的表来映射
      • 一旦框架运行,表就会被在数据库中创建
      • @Table(name="myName")
        • 如果没有name属性,表名就是name字段名
      • @Table(schema="YourDataBaseName") 指定数据库的位置
        • 不指定则根据XML来查找
        • 若没有该数据库,则会先创建数据库
        • 可以不管这个注解
      • @Table(uniqueConstraints=@属性
        • 用于表示:多个东西同时相同的时候,报出异常
        • 如果只是要确认单一项是唯一的,在列上使用unique=true即可
        • 语法如右侧所示:uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])]
    • @Id
      • 标志身下的字段是主键
    • @GeneratedValue
      • 主键的自动增长策略
      • @GeneratedValue(strategy=Generation.IDENTITY)
        • 普通的自增
      • @GeneratedValue(strategy=Generation.AUTO)
        • 利用额外的一张表,作为外键来自增
      • @GeneratedValue(strategy=Generation.SEQUENCE)
        • Oracle自增
    • @Column
      • 模拟数据库中的一个列
        • name:数据库中的一个列
        • length:该字段的最大长度,仅对varchar有效
        • nullable:该字段是否可空
        • unique:是否独有
        • columnDefinition:字段的类型,可以将varchar改为text
          • text是不限长度的字符串
    • @Basic
      • 有一个fetch属性
      • fetch=FetchType.LAZY
      • fetch=FetchType.EAGER 默认
    • @Transient
      • JPA不将该字段映射到数据库中
    • @Temporal
      • @Temporal(Temporal.DATE) 年月日
      • @Temporal(Temporal.TIME) 时分秒
      • @Temporal(Temporal.TIMESTAMP) 默认 年月日
  • Spring Data对JPA的高度封装 的理论问题
    • 版本很重要,SpringDataJPA的方法名不断改变
    • 为什么能使用接口,而SpringData中的接口没有实现类?
      • 底层用代理设计模式,反射生成了对象
      • 使用了Entity Manager对象,还是对Hibernate JPA进行封装
    • Spring Data中的接口继承
      • 继承JpaRepository->PagingAndSortingRepository->CRUDRepository->Repository
      • 因此我们开发时继承JpaRepository<DoMain,Integer>即可
      • 在这些类之外,有一个JpaSpecificationExcutor,该类可以做到动态查询
posted @ 2020-08-31 09:40  ProgrammerZT  阅读(196)  评论(0编辑  收藏  举报