model 类:
//班级
public class Clazz implements Serializable{
private Integer claId;
private String claName;
}
//教师
public class Teacher implements Serializable{
private Integer teaId;
private String teaName;
}
//学生
public class Student implements Serializable{
private Integer stuId;
private String stuName;
private Clazz clazz = new Clazz();
private List<Teacher> teachers = new ArrayList<Teacher>();
}
Mapper 接口:
public interface ClazzMapper {
/** 根据学生查班级*/
Clazz selectByStuId(@Param("stuId") Integer stuId);
}
public interface TeacherMapper {
/** 根据学生查老师 */
List<Teacher> selectByStuId(@Param("stuId") Integer stuId);
}
public interface StudentMapper {
/** 查询学生列表 */
List<Student> selectList();
}
Mapping XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hfd.student.dao.ClazzMapper" >
<resultMap id="BaseResultMap" type="com.hfd.student.model.Clazz" >
<result column="cla_id" property="claId" jdbcType="INTEGER" />
<result column="cla_name" property="claName" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
T.cla_id,
T.cla_name
</sql>
<select id="selectByStuId" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from t2_clazz T
inner join t2_stu_cla sc on T.cla_id = sc.cla_id
where sc.stu_id = #{stuId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hfd.student.dao.TeacherMapper" >
<resultMap id="BaseResultMap" type="com.hfd.student.model.Teacher" >
<result column="tea_id" property="teaId" jdbcType="INTEGER" />
<result column="tea_name" property="teaName" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
T.tea_id,
T.tea_name
</sql>
<select id="selectByStuId" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from t2_teacher T
inner join t2_stu_tea st on T.tea_id = st.tea_id
where st.stu_id = #{stuId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hfd.student.dao.StudentMapper" >
<resultMap id="BaseResultMap" type="com.hfd.student.model.Student" >
<result column="stu_id" property="stuId" jdbcType="INTEGER" />
<result column="stu_name" property="stuName" jdbcType="VARCHAR" />
</resultMap>
<resultMap id="ResultMap" type="com.hfd.student.model.Student" extends="BaseResultMap">
<association column="STU_ID" property="clazz" javaType="com.hfd.student.model.Clazz" select="com.hfd.student.dao.ClazzMapper.selectByStuId" />
<collection column="STU_ID" property="teachers" javaType="arrayList" ofType="com.hfd.student.model.Teacher" select="com.hfd.student.dao.TeacherMapper.selectByStuId"/>
</resultMap>
<sql id="Base_Column_List" >
stu_id, stu_name
</sql>
<select id="selectList" resultMap="ResultMap" >
select
<include refid="Base_Column_List" />
from t2_student
</select>
</mapper>
MYSQL 数据表结构:
CREATE TABLE `t2_clazz` (
`cla_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '班级ID',
`cla_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '班级名称',
PRIMARY KEY (`cla_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `t2_stu_cla` (
`sc_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生班级主键',
`stu_id` int(11) NOT NULL COMMENT '学生ID',
`cla_id` int(11) NOT NULL COMMENT '班级ID',
PRIMARY KEY (`sc_id`),
KEY `sc_stuid` (`stu_id`),
KEY `sc_claid` (`cla_id`),
CONSTRAINT `sc_stuid` FOREIGN KEY (`stu_id`) REFERENCES `t2_student` (`stu_id`),
CONSTRAINT `sc_claid` FOREIGN KEY (`cla_id`) REFERENCES `t2_clazz` (`cla_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `t2_stu_tea` (
`st_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生老师中间主键',
`stu_id` int(11) NOT NULL COMMENT '学生ID',
`tea_id` int(11) NOT NULL COMMENT '教师ID',
PRIMARY KEY (`st_id`),
KEY `st_stuid` (`stu_id`),
KEY `st_teaid` (`tea_id`),
CONSTRAINT `st_teaid` FOREIGN KEY (`tea_id`) REFERENCES `t2_teacher` (`tea_id`),
CONSTRAINT `st_stuid` FOREIGN KEY (`stu_id`) REFERENCES `t2_student` (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `t2_student` (
`stu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
`stu_name` varchar(20) DEFAULT NULL COMMENT '学生姓名',
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
CREATE TABLE `t2_teacher` (
`tea_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '教师ID',
`tea_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '教师姓名',
PRIMARY KEY (`tea_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;