Mybatis多对一,一对多查询模式
创始人
2024-04-03 16:37:43
0

Mybatis多对一,一对多查询模式

  • 1.多对一的处理
    • 按照查询嵌套处理
    • 按照结果嵌套处理
  • 2.一对多的处理
    • 按照结果嵌套处理

1.多对一的处理

现数据库中存在teacher表和student表,其中student表中的tid为外键,连接teacher表中的id

在这里插入图片描述
在这里插入图片描述

实体类:

Student.java:

import lombok.Data;@Data
public class Student {private int id;private String name;private int age;private Teacher teacher;
}

Teacher.java:

import lombok.Data;@Data
public class Teacher {private int id;private String name;private String major;
}

按照查询嵌套处理

StudentMapper.xml:

具体的思路是,使用resultMap进行联合查询操作,封装到一个结果集中:

resultMap中使用association对对象类型进行处理👌





测试类:

public class StudentMapperTest {@Testpublic void test() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);List stuList = mapper.getStuList();for (Student student : stuList) {System.out.println(student);}sqlSession.close();}
}
--------------------------
Student(id=1, name=王伟, age=18, teacher=Teacher{id=1, name='鱼皮', major='语文'})
Student(id=2, name=李华, age=15, teacher=Teacher{id=1, name='鱼皮', major='语文'})
Student(id=3, name=皮皮, age=11, teacher=Teacher{id=1, name='鱼皮', major='语文'})
Student(id=4, name=树立, age=16, teacher=Teacher{id=2, name='大河', major='数学'})
Student(id=5, name=自立, age=17, teacher=Teacher{id=2, name='大河', major='数学'})

按照结果嵌套处理

StudentMapper.xml:

使用复杂的SQL语句直接进行连表查询:



测试类:

@Test
public void test() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);List stuListDou = mapper.getStuListDou();for (Student student : stuListDou) {System.out.println(student);}sqlSession.close();
}
---------------------------------------
Student(id=1, name=王伟, age=0, teacher=Teacher{id=1, name='鱼皮', major='鱼皮'})
Student(id=2, name=李华, age=0, teacher=Teacher{id=2, name='鱼皮', major='鱼皮'})
Student(id=3, name=皮皮, age=0, teacher=Teacher{id=3, name='鱼皮', major='鱼皮'})
Student(id=4, name=树立, age=0, teacher=Teacher{id=4, name='大河', major='大河'})
Student(id=5, name=自立, age=0, teacher=Teacher{id=5, name='大河', major='大河'})

2.一对多的处理

实体类:

Student.java:

import lombok.Data;@Data
public class Student {private int id;private String name;private int age;private int tid;
}

Teacher.java:

import lombok.Data;@Data
public class Teacher {private int id;private String name;private String major;private List students;
}

按照结果嵌套处理

开发接口类:

public interface TeacherMapper {Teacher getTeacherById (@Param("tid") int id);
}

TeacherMapper.xml:





测试类开发:

public class TeacherMapperTest {@Testpublic void testA() {SqlSession sqlSession = MybatisUtils.getSqlSession();TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);Teacher teacher = teacherMapper.getTeacherById(1);System.out.println(teacher);sqlSession.close();}
}

输出结果:

Teacher(id=1, name=鱼皮, major=null, students=[Student(id=1, name=王伟, age=0, tid=1), Student(id=2, name=李华, age=0, tid=1), Student(id=3, name=皮皮, age=0, tid=1)])

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...