mybatis11--多对多关联查询
多对多关联! 其实就是两个一对多的关联! 比如说 一个学生可以有多个老师!一个老师可以有多个学生!
那么 学生和老师之间的关系 可以理解为 多对多的关联关系!
关键是怎么建立数据库中两个表之间的关系???
这时候需要一个中间表来组织两张表的关系!
创建对应的数据库表!
student表


teacher表


middle表


创建对应的实体类

/**
*学生对应的实体类
*/
public class Student { private Integer sId;
private String sName;
//一个学生可以有多个老师
private Set<Teacher> teachers=new HashSet<Teacher>(); public Integer getsId() {
return sId;
}
public void setsId(Integer sId) {
this.sId = sId;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
public Student(Integer sId, String sName, Set<Teacher> teachers) {
super();
this.sId = sId;
this.sName = sName;
this.teachers = teachers;
}
public Student() {
super();
}
//在双向关联的时候 只能一方显示关联信息 否则会出现stackOverflow 异常
@Override
public String toString() {
return "Student [sId=" + sId + ", sName=" + sName + ", teachers="
+ teachers + "]";
} }


/**
*老师的实体类
*/
public class Teacher {
private Integer tId;
private String tName;
//一个老师可以有多个学生
private Set<Student> students=new HashSet<Student>();
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 Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
public Teacher(Integer tId, String tName, Set<Student> students) {
super();
this.tId = tId;
this.tName = tName;
this.students = students;
}
public Teacher() {
super();
}
@Override
public String toString() {
return "Teacher [tId=" + tId + ", tName=" + tName + ", students="
+ students.size() + "]";
} }

创建对应的dao

public interface StudentDao {
/**
* 根据学生的编号查询所有对应老师信息
*/
Student selectTeahcerById(Integer tId);
}

创建对应的mapper文件

<?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="cn.bdqn.dao.StudentDao"> <resultMap type="Student" id="studentMap">
<id property="sId" column="sid"/>
<result property="sName" column="sname"/>
<!-- 设置关联集合的属性 -->
<collection property="teachers" ofType="Teacher">
<id property="tId" column="tid"/>
<result property="tName" column="tname"/>
</collection>
</resultMap> <!-- 根据学生的编号查询所有对应老师信息 -->
<select id="selectTeahcerById" resultMap="studentMap">
select sid,sname,tid,tname from student,middle,teacher
where sid=studentId and tid=teacherId and sid=#{xxx}
</select> </mapper>

在mybatis.xml文件中管理mapper文件
<!-- 加载映射文件信息 -->
<mappers>
<mapper resource="cn/bdqn/dao/StudentMapper.xml" />
</mappers>
创建对应的测试类

public class TeacherTest {
StudentDao dao;
SqlSession session;
@Before
public void before() {
// 因为需要关闭session 需要把session提取出去
session = SessionUtil.getSession();
dao = session.getMapper(StudentDao.class);
}
@After
public void after() {
if (session != null) {
session.close();
}
}
/**
* 根据老师的编号查询所有的导师信息
*/
@Test
public void test1() {
Student student = dao.selectTeahcerById(1);
System.out.println(student);
}
}
mybatis11--多对多关联查询的更多相关文章
- NHibernate教程(11)--多对多关联查询
本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...
- mybatis实战教程二:多对一关联查询(一对多)
多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...
- Python--day64--找到作者关联的所有书籍对象、ORM多对多关联查询的原理
找到当前作者关联的所有书籍对象: ORM多对多关联查询的原理: 编辑作者:
- mybatis 14: 多对一关联查询
业务背景 根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息) 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer i ...
- mybatis多对多关联查询
多对多关系 一个学生可以选多门课程,而一门课程可以由多个学生选择,这就是一个典型的多对多关联关系.所谓多对多关系,其实是由两个互反的一对多关系组成.即多对多关系都会通过一个中间表来建立,例如选课表.学 ...
- MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询
对于一对一,一对多的关联查询,Mybatis-Plus官方示例(mybatis-plus-sample-resultmap)在处理时,需要编写查询方法及配置resultMap,并且写SQL. 为了简化 ...
- mybatis实现多表一对一,一对多,多对多关联查询
原文:https://blog.csdn.net/m0_37787069/article/details/79247321 1.一对一关键字:association作用:针对pojo对象属性的映射 ...
- mybatis 一对多和多对一关联查询
首先 数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.uti ...
- mybatis多对多关联查询——(十)
1.需求 查询用户及用户购买商品信息. 2 sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail. ...
- Hibernate 多对一关联查询
版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5598269.html 一.单向多对一和双向多对一的区别 如果只 ...
随机推荐
- python接口自动化29-requests-html支持JavaScript渲染页面
前言 requests虽好,但有个遗憾,它无法加载JavaScript,当访问一个url地址的时候,不能像selenium一样渲染整个html页面出来. requests-html终于可以支持Java ...
- Down Payment 和 Deposit的差异
If you’re like most homeowners, purchasing a home represents the single biggest financial transactio ...
- 论如何优雅的自定义ThreadPoolExecutor线程池
更好的markDown阅读体验可直接访问我的CSDN博客:https://blog.csdn.net/u012881584/article/details/85221635 前言 线程池想必大家也都用 ...
- 为啥百度、网易、小米都用Python?Python的用途是什么?
Python是一门脚本语言.由于能将其他各种编程语言写的模块粘接在一起,也被称作胶水语言.强大的包容性.强悍的功能和应用的广泛性使其受到越来越多的关注,想起一句老话:你若盛开.蝴蝶自来. 假设你感 ...
- HDU 5095--Linearization of the kernel functions in SVM【模拟】
Linearization of the kernel functions in SVM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- delphi 导出到excel的7种方法
本文来自 爱好者8888 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kpc2000/article/details/17066823?utm_source=cop ...
- docker save提示no space left on device错误
使用df -h看了看,硬盘的确是够用的,于是排除了是硬盘容量的问题. 再细看错误提示: 目录是/var/lib/docker/tmp/docker-export-xxxx/xxxxx,猜测是docke ...
- MongoDB增删改查实例
MongoDB之Java测试代码(DAO层),mongodbdao MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoIni ...
- Spark性能优化指南-高级篇
转自https://tech.meituan.com/spark-tuning-pro.html,感谢原作者的贡献 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作 ...
- mac使用minikube
brew install kubectl 需要加代理! minikube start --vm-driver=xhyve --docker-env HTTP_PROXY=http://your-htt ...