1. 前置准备
1.1 创建表
|
1.2 创建实体类
新建:StudentModel.java
|
新建:StudentInfoModel.java
|
1.3 创建Dao
新建:StudentDao.java
|
新建:StudentInfoDao.java
|
1.4 创建Mapper
新建:StudentDao.xml
|
新建:StudentInfoDao.xml
|
2. 实现方式
Mybatis
通过使用<resultMap>
元素中的子元素<association>
来处理一对一的关联关系。在<association>
元素中,通常可以配置以下属性:
property
: 指定映射到的实体类对象属性,与表字段一一对应。column
: 指定表中对应的字段。javaType
: 指定映射到实体对象属性的类型。select
: 指定引入嵌套查询的子SQL语句,用于关联映射中的嵌套查询。fetchType
: 指定在关联查询时是否启用延迟加载,有lazy
和eager
两个属性值,默认值为lazy
(默认关联映射延迟加载)。
MyBatis
在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果
- 嵌套查询是指通过执行另一条SQL映射语句来返回预期的复杂类型;
- 嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集。
3. 方式一:嵌套查询
3.1 修改实体类
修改: 学生实体类StudentModel.java
,新增学生的扩展信息(studentInfoModel
)属性
|
3.2 修改Mapper
修改: 学生表对应的mapper
文件(StudentDao.xml
)
|
3.3 测试
|
输出结果:
|
虽然使用嵌套查询的方式比较简单,但是嵌套查询的方式要执行多条SQL语句,这对于大型数据集合和列表展示不是很好,因为这样可能会导致成百上千条关联的SOL语句被执行,从而极大地消耗数据库性能,并且会降低查询效率。为此,MyBatis提供了嵌套结果的方式进行关联查询。
@@注意: 生日和创建日期发现Json后有问题
解决方法:
修改字段对应的实体类StudentInfoModel.java
,为字段加上@JSONField
注解,并设置属性format
定义格式。
|
再次运行:
|
4. 方式二: 嵌套结果
4.1 修改Dao
修改StudentDao.java
新增方法: selectStudentById2
|
4.2 修改Mapper
|
4.3 测试
|
输出
|