数据库
tb_course
CREATE TABLE `tb_course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`code` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_course
-- ----------------------------
INSERT INTO `tb_course` VALUES ('1', 'java', '08113226');
INSERT INTO `tb_course` VALUES ('2', 'c++', '08113228');
tb_studentb
CREATE TABLE `tb_studentb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`banji_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `banji_id` (`banji_id`),
CONSTRAINT `banji_id` FOREIGN KEY (`banji_id`) REFERENCES `tb_banji` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_studentb
-- ----------------------------
INSERT INTO `tb_studentb` VALUES ('1', '李四', 'm', '1');
INSERT INTO `tb_studentb` VALUES ('2', 'wangwu', 'm', '2');
INSERT INTO `tb_studentb` VALUES ('3', 'jack', 'f', '1');
INSERT INTO `tb_studentb` VALUES ('4', 'tom', 'f', '2');
tb_electiveCourse
CREATE TABLE `tb_electivecourse` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) DEFAULT NULL,
`course_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `student_id` (`student_id`),
KEY `course_id` (`course_id`),
CONSTRAINT `student_id` FOREIGN KEY (`student_id`) REFERENCES `tb_studentb` (`id`),
CONSTRAINT `course_id` FOREIGN KEY (`course_id`) REFERENCES `tb_course` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_electivecourse
-- ----------------------------
INSERT INTO `tb_electivecourse` VALUES ('1', '1', '1');
INSERT INTO `tb_electivecourse` VALUES ('2', '1', '2');
INSERT INTO `tb_electivecourse` VALUES ('3', '3', '2');
POJO类
package com.ssm.po;
import java.util.List;
public class Course {
private Integer id;
private String name;
private String code;
private List<Studentb> studentList;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<Studentb> getStudentList() {
return studentList;
}
public void setStudentList(List<Studentb> studentList) {
this.studentList = studentList;
}
@Override
public String toString() {
return "Course [id=" + id + ", name=" + name + ", code=" + code + ", studentList=" + studentList + "]";
}
}
package com.ssm.po;
import java.util.List;
public class Studentb {
private Integer id;
private String name;
private String sex;
private List<Course> courseList;
public List<Course> getCourseList() {
return courseList;
}
public void setCourseList(List<Course> courseList) {
this.courseList = courseList;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Studentb [id=" + id + ", name=" + name + ", sex=" + sex + ", courseList=" + courseList + "]";
}
}
映射文件
CourseMapper.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.ssm.mapper.CourseMapper">
<select id="findCourseWithStudent" parameterType="Integer" resultMap="CourseWithStudentResult">
select * from tb_course where id=#{id}
</select>
<resultMap type="com.ssm.po.Course" id="CourseWithStudentResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="code" column="code"/>
<collection property="studentList" column="id" ofType="com.ssm.po.Studentb"
select="com.ssm.mapper.StudentbMapper.findStudentById">
</collection>
</resultMap>
</mapper>
StudentbMapper.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.ssm.mapper.StudentbMapper">
<select id="findStudentById" parameterType="Integer" resultType="com.ssm.po.Studentb">
select * from tb_student where id in(
select student_id from tb_electiveCourse where course_id=#{id}
)
</select>
</mapper>
<mapper resource="com/ssm/mapper/CourseMapper.xml"/>
<mapper resource="com/ssm/mapper/StudentbMapper.xml"/>
测试
@Test
public void findCourseByIdTest() {
SqlSession sqlSession = MybatisUtil.getSession();
Course course = sqlSession.selectOne("com.ssm.mapper.CourseMapper.findCourseWithStudent", 1);
System.out.println(course.toString());
sqlSession.close();
}