**1. 实体类建立关系**
```java
public class Country {
//country 对应 Province.country 属性名
@OneToMany(mappedBy = "country", fetch = FetchType.EAGER)
private List<Province> provinceList;
}
```
```java
public class Province {
//Country -> Province 是一对多,反过来 Province -> Country 就是多对一
@ManyToOne(targetEntity = Country.class)
//country_id 对应 Country.id 属性名
//将会在 Province 表中建立 country_id 的物理外键
@JoinColumn(name = "country_id", referencedColumnName = "id")
private Country country;
}
```
**2. @Query多表查询**
```java
/**
* HSQL查询
*/
@Query("select country from Country country left join Province province "
+ "on country.id=province.country.id where country.continent=?1 and province.level=?2")
List<Country> findAll01(String continent, Integer level);
/**
* SQL查询
*/
@Query(value = "select c.* from country c left join province p "
+ "on c.id=p.country_id where c.continent=?1 and p.level=?2", nativeQuery = true)
List<Country> findAll02(String continent, Integer level);
```
```java
/**
* HSQL查询
*/
@Query("select province from Province province left join Country country "
+ "on province.country.id=country.id where province.level=?1 and country.name=?2")
List<Province> findAll01(Integer level, String name);
/**
* SQL查询
*/
@Query(value = "select p.* from province p left join country c "
+ "on p.country_id=c.id where p.level=?1 and c.name=?2", nativeQuery = true)
List<Province> findAll02(Integer level, String name);
```
- MapStruct属性映射
- MapStruct是什么
- maven依赖
- 基本映射
- 字段名不一致的映射
- 字段类型不一致的映射
- 基本数据类型转换
- 日期格式转换
- 使用表达式转换
- 枚举映射
- 多个源类的映射
- 集合的映射
- 添加自定义映射方法
- 映射前后
- 添加默认值
- 映射异常处理
- SpringDataJPA
- SpringDataJPA是什么
- 与JPA、Hibernate的关系
- 环境搭建
- 简单CURD操作
- 内部原理
- 主键生成策略
- 联合主键
- 查询方式
- 方法命名规则查询
- 限制查询结果查询
- 注解@Query查询
- 命名参数查询
- SpEL表达式查询
- 原生查询
- 更新与删除
- Specification动态查询
- 核心接口
- 查询例子
- 分页查询与排序
- 多表查询
- 一对一查询
- 一对多查询
- 多对多查询
- 注意事项
- Specification多表查询
- @Query多表查询
- 只查询指定字段
- 级联操作
- 加载规则