数据库
Course表
Student表
middle表
多对多的关系需要使用第三张表指定两表的对应关系。
实体类
Course.java
@Getter
@Setter
@ToString
public class Course {
private Integer cid;
private String cname;
}
Student.java
@Getter
@Setter
@ToString
public class Student {
private Integer sid;
private String sname;
//关联属性
private Set<Course> courses;
}
多表关联
IStudentDao.java接口
public interface IStudentDao {
Student selectStudentById(Integer sid);
}
映射文件IStudentDao.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.dao.IStudentDao">
<resultMap type="Student" id="StudentMap">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<collection property="courses" ofType="Course">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</collection>
</resultMap>
<!-- 多表联合查询 -->
<select id="selectStudentById" resultMap="StudentMap">
select sid,sname,cid,cname from student,course,middle
where sid=studentId and cid=courseId and sid=#{xxx}
</select>
</mapper>
与之前一对多的查询类似,就不多叙述了
测试类
public class MyView {
private SqlSession session;
private IStudentDao dao;
//此方法一般用于搭建测试方法的执行环境
@Before
public void Before() throws IOException {
session = MyBatisUtil.getSqlSession();
dao = session.getMapper(IStudentDao.class);
}
@Test
public void test01() {
Student student = dao.selectStudentById(2);
System.out.println(student);
}
}
最后的执行结果