**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多表查询
- 只查询指定字段
- 级联操作
- 加载规则