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 一.单向多对一和双向多对一的区别 如果只 ...
随机推荐
- SpringCloud无废话入门03:Feign声明式服务调用
1.Feign概述 在上一篇的HelloService这个类中,我们有这样一行代码: return restTemplate.getForObject("http://hello-servi ...
- Docker搭建带有访问认证的私有仓库
2017年06月10日 17:30:26 阅读数:2581 以下步骤均为本人亲自踩坑,历经数次失败,最终搭建成功 一.环境信息: 操作系统:CentOS 7 Docker版本:1.12.5 (更高版本 ...
- linux下安装EJBCA 搭建私有CA服务器
linux下安装EJBCA 搭建私有CA服务器 EJBCA是一个全功能的JAVA的CA系统软件,我们可以用此搭建私有CA服务器: 一:首先我的测试环境: 1. linux mint18.3 62位: ...
- 在Ubuntu下添加自定义服务
https://blog.csdn.net/xkjcf/article/details/78698232 在Ubuntu系统中添加自定义服务需要遵从设计启动脚本的模式,下面就是如何编写启动脚本的示例程 ...
- 每天一个linux命令:du
1.命令简介 du (Disk usage) 用来计算每个文件的磁盘用量,目录则取总用量. 2.用法 用法:du [选项]... [文件]... 或:du [选项]... --files0-from= ...
- IIS 重写 HTTP 重定向到 HTTPS
1.购买SSL证书 2.IIS7 / IIS 7.5 下绑定 HTTPS 网站(购买Wildcard SSL泛域名证书可绑定多个子域名)参考上文 3.下载安装URL重写模块:Microsoft URL ...
- 分析技术和方法论营销理论知识框架,营销方面4P、用户使用行为、STP,管理方面5W2H、逻辑树、金字塔、生命周期
原文:五种分析框架:PEST.5W2H.逻辑树.4P.用户使用行为 最近在一点点的啃<谁说菜鸟不懂得数据分析>,相当慢,相当的费脑力,总之,真正的学习伴随着痛苦:) 最初拿到这本书的时候, ...
- int转换char的正确姿势
一:背景 在一个项目中,我需要修改一个全部由数字(0~9)组成的字符串的特定位置的特定数字,我采用的方式是先将字符串转换成字符数组,然后利用数组的位置来修改对应位置的值.代码开发完成之后,发现有乱码出 ...
- 什么是rpc
远程过程调用协议RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TC ...
- jqGrid时间转换
colModel: [ { label: '注册时间', name: 'createDate', index: 'create_date', width: 80, formatter:function ...