**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多表查詢
- 只查詢指定字段
- 級聯操作
- 加載規則