MyBatis的关联映射

一对一

1.创建数据库表stu,stu_card
stu表:
在这里插入图片描述
stu_card表
在这里插入图片描述
学生表与学生卡是一对一的关系

2.创建项目chapter03,并导入相关jar包
在这里插入图片描述
总项目结构如下:
在这里插入图片描述
StuCard.java

package com.qfedu.pojo;

public class StuCard {
	private int cid;
	private double balance;
	public StuCard() {
		super();
		// TODO Auto-generated constructor stub
	}
	public StuCard(int cid, double balance) {
		super();
		this.cid = cid;
		this.balance = balance;
	}
	public int getCid() {
		return cid;
	}
	public void setCid(int cid) {
		this.cid = cid;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
	@Override
	public String toString() {
		return "StuCard [cid=" + cid + ", balance=" + balance + "]";
	}
}

Stu.java

package com.qfedu.pojo;

public class Stu {
	private int sid;
	private String sname;
	private String age;
	private String course;
	private StuCard sc;

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getCourse() {
		return course;
	}

	public void setCourse(String course) {
		this.course = course;
	}

	public StuCard getSc() {
		return sc;
	}

	public void setSc(StuCard sc) {
		this.sc = sc;
	}

	@Override
	public String toString() {
		return "Stu [sid=" + sid + ", sname=" + sname + ", age=" + age + ", course=" + course + ", sc=" + sc + "]";
	}

}

StuCardMapper.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="stucard">
	<select id="findStuCardBycid" parameterType="Integer"
		resultType="com.qfedu.pojo.StuCard">
		select * from stu_card where cid = #{cid}
	</select>
</mapper>

StuMapper.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="stu">
	<select id="findStudentBySid" parameterType="Integer"
		resultMap="stuResultsMap">
		select s.*, c.balance from stu s, stu_card c where s.cardid
		= c.cid
		and s.sid = #{sid}
	</select>
	<resultMap type="stu" id="stuResultsMap">
		<id column="sid" property="sid" />
		<result column="sname" property="sname" />
		<result column="age" property="age" />
		<result column="course" property="course" />
		<association property="sc" javaType="StuCard">
			<id column="cid" property="cid" />
			<result column="balance" property="balance" />
		</association>
	</resultMap>
</mapper>

StuMapper.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="stu">
	<select id="findStudentBySid" parameterType="Integer"
		resultMap="stuResultsMap">
		select s.*, c.balance from stu s, stu_card c where s.cardid
		= c.cid
		and s.sid = #{sid}
	</select>
	<resultMap type="stu" id="stuResultsMap">
		<id column="sid" property="sid" />
		<result column="sname" property="sname" />
		<result column="age" property="age" />
		<result column="course" property="course" />
		<association property="sc" javaType="StuCard">
			<id column="cid" property="cid" />
			<result column="balance" property="balance" />
		</association>
	</resultMap>
</mapper>

mybatis-config.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>
	<!--配置别名 -->
	<typeAliases>
		<package name="com.qfedu.pojo" />
	</typeAliases>
	<!--配置环境 -->
	<environments default="mysql">
		<environment id="mysql">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/chapter03" />
				<property name="username" value="root" />
				<property name="password" value="012345" />
			</dataSource>
		</environment>
	</environments>
	<!--引入映射文件 -->
	<mappers>
		<mapper resource="com/qfedu/mapper/StuMapper.xml"/>
		<mapper resource="com/qfedu/mapper/StuCardMapper.xml"/>
		<mapper resource="com/qfedu/mapper/StuClassMapper.xml"/>
		<mapper resource="com/qfedu/mapper/ClassInfoMapper.xml"/>
	</mappers>
</configuration>

TestOneToOne.java

package com.qfedu.test;

import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import com.qfedu.pojo.*;

public class TestOneToMany {
	public static void main(String[] args) throws Exception {
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();
		// 使用MyBatis查询cid为1的班级信息(包括该班级的学生信息)
		StuClass stuClass = session.selectOne("stuClass.findStuClassByCid", 1);
		System.out.println("班级ID:" + stuClass.getCid() + "\n班级名称:" + stuClass.getCname() + "\n班级人数:" + stuClass.getSum()
				+ "\n学生信息:");
		List<StuInfo> stuInfoList = stuClass.getStuInfoList();
		for (StuInfo stuInfo : stuInfoList) {
			System.out.println(stuInfo);
		}
		session.close();
	}
}

一对多

1.创建数据库表stu_class,stu_info表
stu_class表
在这里插入图片描述
stu_info表
在这里插入图片描述
班级与学生是一对多的关系
StuInfo.java

package com.qfedu.pojo;

public class StuInfo {
	private int sid;
	private String sname;
	private String age;
	private String course;

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getCourse() {
		return course;
	}

	public void setCourse(String course) {
		this.course = course;
	}

	@Override
	public String toString() {
		return "Stu [sid=" + sid + ", sname=" + sname + ", age=" + age + ", " + " course=" + course + "]";
	}
}

StuClass.java

package com.qfedu.pojo;

import java.util.List;

public class StuClass {
	private Integer cid;
	private String cname;
	private Integer sum;
	private List<StuInfo> stuInfoList;

	public Integer getCid() {
		return cid;
	}

	public void setCid(Integer cid) {
		this.cid = cid;
	}

	public String getCname() {
		return cname;
	}

	public void setCname(String cname) {
		this.cname = cname;
	}

	public Integer getSum() {
		return sum;
	}

	public void setSum(Integer sum) {
		this.sum = sum;
	}

	public List<StuInfo> getStuInfoList() {
		return stuInfoList;
	}

	public void setStuInfoList(List<StuInfo> stuInfoList) {
		this.stuInfoList = stuInfoList;
	}
}

StuClassMapper.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="stuClass">
	<select id="findStuClassByCid" parameterType="Integer"
		resultMap="stuClassResultsMap">
		select c.*,s.sid,s.sname,s.age,s.course from stu_class c ,
		stu_info
		s where s.classid = c.cid and c.cid = #{cid}
	</select>
	<insert id="addStuClass02" parameterType="stuClass">
		insert into stu_class(cname,sum) values (#{cname},#{sum})
		<selectKey keyColumn="cid" keyProperty="cid" resultType="Integer" order="AFTER">
			select LAST_INSERT_ID()
		</selectKey>
	</insert>
	
	<insert id="addStuClass01" parameterType="stuClass" useGeneratedKeys="true"  keyProperty="cid">
		insert into stu_class(cname,sum) values (#{cname},#{sum})
	</insert>
	
	<resultMap type="stuClass" id="stuClassResultsMap">
		<id column="cid" property="cid" />
		<result column="cname" property="cname" />
		<result column="sum" property="sum" />
		<collection property="stuInfoList" ofType="stuInfo">
			<id column="sid" property="sid" />
			<result column="sname" property="sname" />
			<result column="age" property="age" />
			<result column="course" property="course" />
		</collection>
	</resultMap>
</mapper>

TestOneToMany.java

package com.qfedu.test;

import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import com.qfedu.pojo.*;

public class TestOneToMany {
	public static void main(String[] args) throws Exception {
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();
		// 使用MyBatis查询cid为1的班级信息(包括该班级的学生信息)
		StuClass stuClass = session.selectOne("stuClass.findStuClassByCid", 1);
		System.out.println("班级ID:" + stuClass.getCid() + "\n班级名称:" + stuClass.getCname() + "\n班级人数:" + stuClass.getSum()
				+ "\n学生信息:");
		List<StuInfo> stuInfoList = stuClass.getStuInfoList();
		for (StuInfo stuInfo : stuInfoList) {
			System.out.println(stuInfo);
		}
		session.close();
	}
}

多对多

1.创建数据库表class_info,class_teach表
class_info表:
在这里插入图片描述
class_teach表:
在这里插入图片描述
班级与老师是多对多的关系
TeachInfo.java

package com.qfedu.pojo;

import java.util.List;

public class TeachInfo {
	private Integer tid;
	private String tname;
	private String age;
	private String course;
	private List<ClassInfo> classInfoList;

	public Integer getTid() {
		return tid;
	}

	public void setTid(Integer tid) {
		this.tid = tid;
	}

	public String getTname() {
		return tname;
	}

	public void setTname(String tname) {
		this.tname = tname;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getCourse() {
		return course;
	}

	public void setCourse(String course) {
		this.course = course;
	}

	public List<ClassInfo> getClassInfoList() {
		return classInfoList;
	}

	public void setClassInfoList(List<ClassInfo> classInfoList) {
		this.classInfoList = classInfoList;
	}

	@Override
	public String toString() {
		return "TeachInfo [tid=" + tid + ", tname=" + tname + ", age=" + age + ", course=" + course + ", classInfoList="
				+ classInfoList + "]";
	}
}

ClassInfo.java

package com.qfedu.pojo;

import java.util.List;

public class ClassInfo {
	private Integer cid;
	private String cname;
	private Integer sum;
	private List<TeachInfo> teachInfoList;

	public Integer getCid() {
		return cid;
	}

	public void setCid(Integer cid) {
		this.cid = cid;
	}

	public String getCname() {
		return cname;
	}

	public void setCname(String cname) {
		this.cname = cname;
	}

	public Integer getSum() {
		return sum;
	}

	public void setSum(Integer sum) {
		this.sum = sum;
	}

	public List<TeachInfo> getTeachInfoList() {
		return teachInfoList;
	}

	public void setTeachInfoList(List<TeachInfo> teachInfoList) {
		this.teachInfoList = teachInfoList;
	}

	@Override
	public String toString() {
		return "ClassInfo [cid=" + cid + ", cname=" + cname + ", sum=" + sum + ", teachInfoList=" + teachInfoList + "]";
	}
}

ClassInfoMapper.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="classInfo">
	<select id="findClassInfoByCid" parameterType="Integer"
		resultMap="classInfoResultsMap">
		select c.*,t.* from class_info c ,teach_info t, class_teach
		ct where
		c.cid=ct.class_id
		and ct.teach_id = t.tid and c.cid = #{cid}
	</select>
	<resultMap type="classInfo" id="classInfoResultsMap">
		<id column="cid" property="cid" />
		<result column="cname" property="cname" />
		<result column="sum" property="sum" />
		<collection property="teachInfoList" ofType="teachInfo">
			<id column="tid" property="tid" />
			<result column="tname" property="tname" />
			<result column="age" property="age" />
			<result column="course" property="course" />
		</collection>
	</resultMap>
</mapper>

TestManyToMany.java

package com.qfedu.test;

import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import com.qfedu.pojo.*;

public class TestManyToMany {
	public static void main(String[] args) throws Exception {
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();
		// 使用MyBatis查询cid为1的班级信息(包括该班级的教师信息)
		ClassInfo classInfo = session.selectOne("classInfo.findClassInfoByCid", 1);
		System.out.println("班级ID:" + classInfo.getCid() + "\n班级名称:" + classInfo.getCname() + "\n班级人数:"
				+ classInfo.getSum() + "\n教师信息:");
		List<TeachInfo> teachInfoList = classInfo.getTeachInfoList();
		for (TeachInfo teachInfo : teachInfoList) {
			System.out.println(teachInfo.toString());
		}
		session.close();
	}
}

主键映射

TestAddStuClass.java

package com.qfedu.test;

import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import com.qfedu.pojo.StuClass;

public class TestAddStuClass {
	public static void main(String[] args) throws Exception {
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();
		StuClass stuClass = new StuClass();
		stuClass.setCname("Javaweb");
		stuClass.setSum(50);
		// 使用MyBatis插入一条班级信息
		//int result = session.insert("stuClass.addStuClass01", stuClass);
		int result = session.insert("stuClass.addStuClass02",stuClass );
		if (result > 0) {
			System.out.println("成功插入" + result + "条数据");
			System.out.println("插入数据的主键cid为:" + stuClass.getCid());
		} else {
			System.out.println("插入操作失败");
		}
		// 提交事务
		session.commit();
		// 关闭SqlSession
		session.close();
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值