**1. 单独被注解`@Id`标记的主键**
```java
/**
* 只添加一个@Id注解,则插入数据时必须给id赋值
*/
@Id
private String id;
```
**2. `@GeneratedValue`提供的主键生成策略**
```java
/**
* (1)GenerationType.TABLE:使用一个特定的数据表保存主键,每插入一条数据就增1。
* (2)GenerationType.IDENTITY:自增键。
* (3)GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列,需要与生成器generator一同使用。
* (4)GenerationType.AUTO:与GenerationType.IDENTITY同等效果,是默认选项。
*
* 上面的任何一个策略,插入数据时,即使对id赋值也没有用,主键始终都是采用上面的策略生成。
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
```
**3. `@GenericGenerator`提供的主键生成策略**
`@GenericGenerator`是Hibernate提供的自定义主键策略生成器,它需要和`@GeneratedValue`一起使用。
```java
/**
* name:主键生成器的名称。
* strategy:主键生成器。
* generator:指定name的生成器名称。
*
*/
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")
@GeneratedValue(generator = "idGenerator")
private String id;
```
`@GenericGenerator(strategy="..")`可选的生成器如下:
```java
----org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory----
public DefaultIdentifierGeneratorFactory() {
//生成的主键类似:6bd9f52e-4840-417b-a5e1-435f28f36db4
this.register("uuid2", UUIDGenerator.class);
//生成的主键类似:ab75d152-43ab-11ec-b61f-1831bf140125
this.register("guid", GUIDGenerator.class);
//生成的主键类似:4028b8817d13d3d1017d13d3d6080000
this.register("uuid", UUIDHexGenerator.class);
//生成的主键类似:4028b8817d13e8a9017d13e8ac4f0000
this.register("uuid.hex", UUIDHexGenerator.class);
this.register("assigned", Assigned.class);
//生成的主键类似:自增键
this.register("identity", IdentityGenerator.class);
this.register("select", SelectGenerator.class);
this.register("sequence", SequenceStyleGenerator.class);
this.register("seqhilo", SequenceHiLoGenerator.class);
this.register("increment", IncrementGenerator.class);
this.register("foreign", ForeignGenerator.class);
this.register("sequence-identity", SequenceIdentityGenerator.class);
this.register("enhanced-sequence", SequenceStyleGenerator.class);
this.register("enhanced-table", TableGenerator.class);
}
```
- MapStruct属性映射
- MapStruct是什么
- maven依赖
- 基本映射
- 字段名不一致的映射
- 字段类型不一致的映射
- 基本数据类型转换
- 日期格式转换
- 使用表达式转换
- 枚举映射
- 多个源类的映射
- 集合的映射
- 添加自定义映射方法
- 映射前后
- 添加默认值
- 映射异常处理
- SpringDataJPA
- SpringDataJPA是什么
- 与JPA、Hibernate的关系
- 环境搭建
- 简单CURD操作
- 内部原理
- 主键生成策略
- 联合主键
- 查询方式
- 方法命名规则查询
- 限制查询结果查询
- 注解@Query查询
- 命名参数查询
- SpEL表达式查询
- 原生查询
- 更新与删除
- Specification动态查询
- 核心接口
- 查询例子
- 分页查询与排序
- 多表查询
- 一对一查询
- 一对多查询
- 多对多查询
- 注意事项
- Specification多表查询
- @Query多表查询
- 只查询指定字段
- 级联操作
- 加载规则