**1. 延遲加載**
```java
//@OneToOne、@OneToMany、@ManyToOne、@ManyToMany 都有一個屬性 fetch 來控制加載規則
//但是受到加載規則影響的只有 @OneToMany、@ManyToMany兩個注解,剩余注解用哪種加載規則都是一樣的效果
public @interface OneToMany {
//加載規則
//FetchType.EAGER 立即加載,查詢當前實體時,也查詢該實體關聯的其它實體
//FetchType.LAZY 延遲加載,查詢當前實體時,不查詢該實體關聯的其它實體
FetchType fetch() default FetchType.LAZY;
}
```
**2. 使用加載規則**
(1)實體之間建立關系。
```java
public class Country {
@OneToMany(mappedBy = "country", fetch = FetchType.LAZY)
private List<Province> provinceList;
}
```
```java
public class Province {
@ManyToOne(targetEntity = Country.class, fetch = FetchType.LAZY)
@JoinColumn(name = "country_id", referencedColumnName = "id")
private Country country;
}
```
(2)不同加載規則查詢結果。
```java
/*********************** Country -> Province *************************/
@Test
public void example01() {
List<Country> countryList = countryRepository.findAll();
for (Country country : countryList) {
System.out.println(country.getId());
//當加載規則是 @OneToMany(mappedBy = "country", fetch = FetchType.LAZY) 時,只查詢了 Country,沒有查詢 Province
//所以只調用 Country 時是可以的,但是調用 Province 則拋出異常
//System.out.println(country.getProvinceList().size());
//當加載規則是 @OneToMany(mappedBy = "country", fetch = FetchType.EAGER) 時,Country 與 Province 都查了
//調用 Country 或 Province 都可以
System.out.println(country.getProvinceList().size());
}
}
```
- MapStruct屬性映射
- MapStruct是什么
- maven依賴
- 基本映射
- 字段名不一致的映射
- 字段類型不一致的映射
- 基本數據類型轉換
- 日期格式轉換
- 使用表達式轉換
- 枚舉映射
- 多個源類的映射
- 集合的映射
- 添加自定義映射方法
- 映射前后
- 添加默認值
- 映射異常處理
- SpringDataJPA
- SpringDataJPA是什么
- 與JPA、Hibernate的關系
- 環境搭建
- 簡單CURD操作
- 內部原理
- 主鍵生成策略
- 聯合主鍵
- 查詢方式
- 方法命名規則查詢
- 限制查詢結果查詢
- 注解@Query查詢
- 命名參數查詢
- SpEL表達式查詢
- 原生查詢
- 更新與刪除
- Specification動態查詢
- 核心接口
- 查詢例子
- 分頁查詢與排序
- 多表查詢
- 一對一查詢
- 一對多查詢
- 多對多查詢
- 注意事項
- Specification多表查詢
- @Query多表查詢
- 只查詢指定字段
- 級聯操作
- 加載規則