java实验五 MyBatis的关联映射
时间: 2024-05-01 18:23:55 浏览: 151
MyBatis是一款轻量级的ORM框架,支持关联映射。关联映射是指将多个表之间的关联关系映射到Java对象之间的关联关系。Java对象之间的关联关系可以通过对象引用来表示,而多个表之间的关联关系可以通过外键来表示,因此需要使用关联映射将两者关联起来。
在Java中,可以使用嵌套对象来表示多个表之间的关联关系。例如,有两个表,一个是学生表,一个是班级表,学生表中包含班级ID,可以使用一个嵌套的班级对象来表示学生所在的班级。在MyBatis中,可以使用以下两种方式实现关联映射:
1. 嵌套查询:在查询学生信息的同时,查询出对应班级的信息,并将其封装到嵌套对象中。
```
<select id="getStudent" resultMap="studentResult">
select s.*, c.class_name from student s
inner join class c on s.class_id = c.class_id
where s.student_id = #{id}
</select>
<resultMap id="studentResult" type="Student">
<result property="id" column="student_id"/>
<result property="name" column="student_name"/>
<result property="class.id" column="class_id"/>
<result property="class.name" column="class_name"/>
</resultMap>
```
2. 延迟加载:在查询学生信息时,只查询出学生表的信息,而班级信息则在需要时再进行查询。这种方式可以减少查询时的数据量,但需要注意延迟加载可能会引起N+1查询问题。
```
<resultMap id="studentResult" type="Student">
<result property="id" column="student_id"/>
<result property="name" column="student_name"/>
<association property="class" column="class_id"
select="getClassById" fetchType="lazy"/>
</resultMap>
<select id="getClassById" resultMap="classResult">
select * from class where class_id = #{id}
</select>
<resultMap id="classResult" type="Class">
<result property="id" column="class_id"/>
<result property="name" column="class_name"/>
</resultMap>
```
以上是两种常用的关联映射方式,可以根据具体情况选择合适的方式。同时,建议在设计数据库时,尽量采用规范化的设计,避免出现冗余数据和不必要的关联关系,以便更好地进行关联映射。
阅读全文