准备数据库表:
准备数据:
student:course:stu_course:
maven依赖:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
项目结构:
1.定义Student.java、Course.java和关联对象StudentCourse.java
Student.java
/**
* createtime : 2019年10月22日 下午2:50:58
*/
package com.manytomany.models;
import java.util.List;
/**
* TODO
* @author XWF
*/
public class Student {
private int id;
private String studentName;
private List<Course> courses;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
@Override
public String toString() {
return "Student [id=" + id + ", studentName=" + studentName + ", courses=" + courses + "]";
}
}
Course.java
/**
* createtime : 2019年10月22日 下午2:51:21
*/
package com.manytomany.models;
import java.util.List;
/**
* TODO
* @author XWF
*/
public class Course {
private int id;
private String coursename;
private List<Student> students;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCoursename() {
return coursename;
}
public void setCoursename(String coursename) {
this.coursename = coursename;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "Course [id=" + id + ", coursename=" + coursename + ", students=" + students + "]";
}
}
StudentCourse.java
/**
* createtime : 2019年10月22日 下午2:51:34
*/
package com.manytomany.models;
/**
* TODO
* @author XWF
*/
public class StudentCourse {
private int studentId;
private int courseId;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public int getCourseId() {
return courseId;
}
public void setCourseId(int courseId) {
this.courseId = courseId;
}
}
2.定义mybatis的配置
mybatis_mtm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="com/manytomany/configs/mysql.properties"></properties>
<typeAliases>
<typeAlias alias="stu" type="com.manytomany.models.Student"/>
<typeAlias alias="cou" type="com.manytomany.models.Course"/>
<typeAlias alias="stu_cou" type="com.manytomany.models.StudentCourse"/>
</typeAliases>
<environments default="env1">
<environment id="env1">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/manytomany/mappers/Student.xml"/>
<mapper resource="com/manytomany/mappers/Course.xml"/>
<mapper resource="com/manytomany/mappers/StudentCourse.xml"/>
</mappers>
</configuration>
mysql.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.1.244:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=root
3.定义mapper映射
Student.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="manytomany.student">
<resultMap id="stuResultMap" type="stu">
<id property="id" column="sid"/>
<result property="studentName" column="sname"/>
<!-- 通过stuid查询关联的course -->
<collection property="courses" column="sid" select="manytomany.studentcourse.getCourseByStudentId"></collection>
</resultMap>
<select id="getStudentById" resultMap="stuResultMap" parameterType="int">
select id sid, stuname sname
from student
where id = #{id}
</select>
</mapper>
Course.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="manytomany.course">
<resultMap type="cou" id="couResultMap">
<id property="id" column="id"/>
<result property="coursename" column="coursename"/>
<collection property="students" column="id" select="manytomany.studentcourse.getStudentByCourseId"></collection>
</resultMap>
<select id="getCourseById" resultMap="couResultMap" parameterType="int">
select *
from course
where id = #{id}
</select>
</mapper>
StudentCourse.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="manytomany.studentcourse">
<!-- 根据courseId查询所有stu -->
<resultMap type="stu" id="resultStudent">
<id property="id" column="id"/>
<result property="studentName" column="stuname"/>
</resultMap>
<select id="getStudentByCourseId" resultMap="resultStudent" parameterType="int">
select s.*
from student s, stu_course sc
where s.id = sc.stuid and sc.courseid = #{couid}
</select>
<!-- 根据stuId查询所有course -->
<resultMap type="cou" id="resultCourse">
<id property="id" column="id"/>
<result property="coursename" column="coursename"/>
</resultMap>
<select id="getCourseByStudentId" resultMap="resultCourse" parameterType="int">
select c.*
from course c, stu_course sc
where c.id = sc.courseid and sc.stuid = #{stuid}
</select>
</mapper>
4.测试Demo:
/**
* createtime : 2019年10月22日 下午2:49:30
*/
package com.manytomany;
import java.io.IOException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.manytomany.models.Course;
import com.manytomany.models.Student;
/**
* TODO
* @author XWF
*/
public class MainManyToMany {
/**
* @param args
*/
public static void main(String[] args) {
try {
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("com/manytomany/configs/mybatis_mtm.xml"));
SqlSession session = factory.openSession();
Student stu = session.selectOne("manytomany.student.getStudentById", 4);
System.out.println(stu.getId());
System.out.println(stu.getStudentName());
System.out.println(stu.getCourses());
System.out.println();
Course cou = session.selectOne("manytomany.course.getCourseById", 2);
System.out.println(cou.getId());
System.out.println(cou.getCoursename());
System.out.println(cou.getStudents());
System.out.println();
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
参考: