1、一对一关联
/**
* 班级信息
*/
private ClassRoom classRoomInfo;
<resultMap id="BaseResultMap" type="com.mage.mybatis.association.entity.Student">
<id column="sid" property="id" />
<result column="name" property="name" />
<result column="class_room_id" property="classRoomId" />
<association property="classRoomInfo" column="class_room_id" javaType="classRoom">
<id column="cr_id" property="id" />
<result column="class_room_name" property="name" />
</association>
</resultMap>
解释一下:
这个是mybatis的关联关系一对一标签
property:这个属性代表当前一对一关系在主实体类(也就是学生实体类)里的属性名称
column:代表通过主表中的某个关联字段关联连接的表,也就是class_room_id 班级id可以跟班级扯上关系
javaType:查询出来后要映射的实体类
2、一对多
<!-- 按班级id查询班级信息及该班级的学生 -->
<select id="getClassRoomInnerStudents" resultMap="BaseResultMap" parameterType="int">
SELECT cr.id cr_id,cr.`name` class_room_name ,s.id sid,s.`name`,s.class_room_id
FROM t_class_room cr
INNER JOIN t_student s ON s.class_room_id = cr.id
where cr.id = 1
</select>
/**
* 学生
*/
private List<Student> students;
<resultMap id="BaseResultMap" type="com.mage.mybatis.association.entity.ClassRoom">
<id column="cr_id" property="id" />
<result column="class_room_name" property="name" />
<collection property="students" column="cr_id" javaType="ArrayList" ofType="student">
<id column="sid" property="id" />
<result column="name" property="name" />
<result column="class_room_id" property="classRoomId" />
</collection>
</resultMap>
属性:
property:与association标签中的property一个意思,也是指向与当前主实体中的成员变量
column:一对多关系主表连接子表的外键
javaType:因为是主实体类里的成员变量为集合的原因,所以这里填写ArrayList
ofType:集合中存储的实体类,所以填写Student类,我这里是小写的原因是我配置了别名
ClassRoomMapper.java下加入方法
/**
* 按班级id查询班级信息及该班级的学生
* @param cid
* @return
*/
ClassRoom getClassRoomInnerStudents(Integer cid);