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 一.单向多对一和双向多对一的区别 如果只 ...
随机推荐
- HOWTO: 如何利用Avizo或Amira计算孔隙率(Porosity)
在做三维可视化数据处理过程中,我们经常要提取的一个基本信息就是孔隙率.在今天的文章中我们要分享两个信息,一个是如何利用Avizo或Amira进行孔隙率计算:另外是关于Avizo 8.0中孔隙率计算异常 ...
- Java操作Linuxshell并且获取返回值
/** * */package com.king.weixin.util;import java.io.BufferedReader;import java.io.InputStream;/*** @ ...
- 小程序longpress的bug及其解决
我的小程序中,用到一个长按修改的功能,设计是这样的,短按tap,长按longpress 但是,偶尔出现长按无效的情况.我自己都经常碰到,今天仔细研究,用半天时间反复寻找,重现,发现问题和内存或别的因素 ...
- IFNULL和isnull用法
语法 ISNULL ( check_expression , replacement_value ) 参数 check_expression: 将被检查是否为 NULL的表达式.check_expre ...
- 基于cefsharp的用户浏览器
技术:vc++2015 概述 用于需要制作一个浏览器 winfrom 中浏览器的插件有很多种 如:WebBrowser , Web.kit等 但用于比较稳定 功能齐全的还是cefsharp 详细 ...
- RobotFrameWork接口设计规范
1. 前言 继前面一章<RobotFramework环境搭建>介绍了在本地如何将接口自动化实施过程所需要的基础环境搭建好,在这里假设大家都已经知道环境如何搭建了,如果不清楚的可直接查看上一 ...
- Unable to find vcvarsall.bat
windows下pip安装各种包时,经常会遇到此错误.本文介绍解决方案. 第一步:安装visual studio 第二步:安装everything 打开everything,搜索vcvarsall.b ...
- Couldn't find log associated with operation handle: OperationHandle [opType=EXECUTE_STATEMENT, getHandleIdentifier ()=5687ff62-aa71-4b47-af6c-89f6a3f7a1fe]
这个异常的出现是因为hive-site-xml中的hive.server2.logging.operation.log.location属性未配置正确: 修改为: <property> & ...
- POSTMAN发送WebService接口
WebService是一种跨编程语言和跨操作系统平台的远程调用技术 http://www.oorsprong.org/websamples.countryinfo/countryinfoservice ...
- .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
/// <summary> /// 项目文件夹下路径 返回流类型数据,如:图片类型 /// </summary> /// <returns></returns ...