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) 默认 年月日
- @Entity 把一个实体类映射到数据库中
- Spring Data对JPA的高度封装 的理论问题
- 版本很重要,SpringDataJPA的方法名不断改变
- 为什么能使用接口,而SpringData中的接口没有实现类?
- 底层用代理设计模式,反射生成了对象
- 使用了Entity Manager对象,还是对Hibernate JPA进行封装
- Spring Data中的接口继承
- 继承JpaRepository->PagingAndSortingRepository->CRUDRepository->Repository
- 因此我们开发时继承JpaRepository<DoMain,Integer>即可
- 在这些类之外,有一个JpaSpecificationExcutor,该类可以做到动态查询