MyBatis——多对多

准备数据库表:

准备数据:

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();
		}
	}

}

结果:

 

 

 

参考:

https://www.yiibai.com/mybatis/mybatis-many2many.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值