多对一查询

2023-11-20

 是这样的,首先学生表中有三个属性,前两个属性要出现在结果集中,第三个属性哦用于查找教师的名字,然后呢,用resultMap重新处理,将老师的名字重新对应为学生表的第三个属性。其实这样做有局限

多对一查询

SQL语句

SELECT s.id ,s.name,t.name from student s ,teacher t WHERE s.tid=t.id
  public List<Student> getStudent();

实现接口类

配置Mapper文件

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace命名空间:与那个接口类文件产生交集,相当于实现那个接口-->
<mapper namespace="com.kuang.dao.StudentMapper">

<!--  思路
  1.查询所有的学生
  2.根据查询出来的学生的tid,寻找对应的老师!


  -->
 <select id="getStudent" resultMap="StudentTeacher">
     select * from student
 </select>

<resultMap id="StudentTeacher" type="Student">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
<!--    result只能针对单个属性,复杂的对象用不了-->
<!--  这是多对一的处理方式 多个学生对一个老师
    如果是返回的一个对象就用association
    返回的是一个集合就用collection
-->
    <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>

</resultMap>

    <select id="getTeacher" resultType="Teacher">
        select * from teacher where id=#{id}

    </select>



</mapper>

实现原理就是 嵌套子查询

   @Test
    public void getStudent(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> student = mapper.getStudent();
        for (Student a : student) {
            System.out.println(a);
        }


        sqlSession.close();

    }

只有一个参数时自动匹配,无论写啥都行

注意

第二种方法:结果嵌套处理

2。此处查询后输出3个字段,有两个字段基本同名,取别名区分

取别名可以不用AS

讲实话,真的要写的话,还是第一种更加适用,第二种只适合查询少量列的情况

即使只是写了三个查询都感觉到了这种方式过于麻烦了

其实:我自己的理解:

结果集嵌套就是 用SQL查出来的结果  通过resultMap  用别名   association 映射到 对象的属性里 通过输出对象,对象的属性也一一输出出来。

  //第二种方法,结果嵌套实现
   public List<Student> getStudent2();
<!--方法2 通过结果嵌套-->
    <select id="getStudent2" resultMap="StudentTeacher2">
        SELECT s.id sid,s.name sname,t.id thid,t.name tname from student s ,teacher t WHERE s.tid=t.id
    </select>
<!--   由于Student类里有个属性是Teacher类的对象 所以与数据库的名字不一致,所以要使用结果集 -->
      <resultMap id="StudentTeacher2" type="Student">
               <result property="id" column="sid"/>
               <result property="name" column="sname"/>

          <association property="teacher" javaType="Teacher" >
              <result property="name" column="tname"/>
              <result property="id" column="thid"/>
          </association>
      </resultMap>


  @Test
    public void getStudent2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> student = mapper.getStudent2();
        for (Student a : student) {
            System.out.println(a);
        }


        sqlSession.close();

    }

 子查询对应第一种方式

联表查询对应第二种方式

说白了

1.第一种方式:其实就是查询嵌套 查询出对象进入 主对象  

2.第二种方式:其实就是结果嵌套 进入对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多对一查询 的相关文章

随机推荐

  • Mageia 9 发布:搭载 Linux 内核 6.4,支持 PulseAudio

    导读 Mageia 最初是 Mandriva Linux 的一个分支 但现在已经发展成全面的 独立 Linux 发行版 从 2010 年以来 Mageia 已经成为一个用于桌面或服务器的稳定且安全的操作系统 并且定期更新 它的近期的发布公告
  • C语言排序算法实现

    C语言实现各种排序算法 冒泡排序 选择排序 插入排序 希尔排序 插入方式 非交换方式 快速排序 归并排序 分治思想 基数排序 桶排序 基数排序的基本思想 典型的空间换时间方式 冒泡排序 include
  • moviepy 生成的视频只有声音没有图像

    问题描述 PDF转成视频 用moviepy 将图片生成视频的时候 生成的视频 有些播放器 播放只有声音没有图像 解决方案 查看源码后发现在 ffmpeg writer py 文件里面有一段这样的代码 if codec libx264 and
  • 在线AI日语视频音频翻译中文字幕

    新番视频没有字幕 AI日语字幕识别让你先睹为快 蓝海智能在线AI工具 niceaitools com languageTra 目前价格是每视频音频分钟0 42元 具体使用方法如下 1 格式工厂处理 把你的日语视频或音频文件 通过格式工厂处理
  • VBA 自定义函数 库存消耗截止

    两个自定义函数 按照库存 计算哪一周库存能消耗完 标出周 自定义函数 按照库存 计算消耗完的那一周实际消耗多少数量 自定义函数 从消耗完的那一周开始算起 后面的周消耗数量都变为0 按钮 Function HaoJin StockQty As
  • Pytorch中常用的损失函数

    Pytorch中常用的损失函数 回归 nn L1Loss nn MSELoss 分类 nn CrossEntropyLoss 回归 nn L1Loss 平均绝对误差 也称L1范数损失 计算预测值与真实值之间的误差绝对值 L 1 L o s
  • python中模块,包,库的概念

    https www cnblogs com mlgjb p 7875494 html 模块 就是 py文件 里面定义了一些函数和变量 需要的时候就可以导入这些模块 包 在模块之上的概念 为了方便管理而将文件进行打包 包目录下第一个文件便是
  • OpenGL入门教程之 深入理解

    一 OpenGL简介 OpenGL是一种用于渲染2D 3D矢量图形的跨语言 跨平台的应用程序编程规范 OpenGL包含一系列可以操作图形和图像的函数 但OpenGL没有实现这些函数 OpenGL仅规定每个函数应该如何执行以及其输出值 类似接
  • 若依开源框架登录扩展Springboot+security,密码、验证码多种登录

    自定义登录扩展类 继承DaoAuthenticationProvider类型 重写additionalAuthenticationChecks方法 CustomLoginAuthenticationProvider java package
  • 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...

    华为是大企业 是不是很难进去啊 在华为做软件测试 能得到很好的发展吗 一进去就有9 5K 其实也没有想的那么难 直到现在 心情都还是无比激动 本人211非科班 之前在字节和腾讯实习过 这次其实没抱着什么特别大的希望投递 没想到华为可以再给我
  • 2023计算机毕业设计SSM最新选题之java个人微博网站1x930

    2023计算机毕业设计SSM最新选题之java个人微博网站1x930 做毕业设计一定要选好题目 毕设想简单 其实很简单 这里给几点建议 1 首先 学会收集整理 年年专业都一样 岁岁毕业人不同 很多人在做毕业设计的时候 都犯了一个错误 那就是
  • 数组理论干货

    数组 如果看文字麻烦就直接跳到最后一个代码块 Array 1 Java语言中的数组是一种引用数据类型 不属于基本数据类型 数组的父类是Object 2 数组实际上是一个容器 可以同时容纳多个元素 数组是一个数据的集合 数组 字面意思是 一组
  • JAVA输出一个爱心

    在 Java 中输出一个爱心可以使用字符画的方式 如下代码所示 public class LoveHeart public static void main String args System out println System out
  • discuz 论坛配置 QQ/163 网易邮箱

    步骤 在 discuz 后台的 站长 邮件设置 里按如下配置 SMTP 服务器固定 163 网易填 ssl smtp 163 com QQ 邮箱则填 ssl smtp qq com 端口 465 验证 勾选 配置完成后 会进行测试验证 发信
  • clamp 函数

    clamp 函数 返回范围内的一个数值 可以使用 clamp 函数将不断增加 减小或随机变化的数值限制在一系列的值中 float clamp float minnumber float maxnumber float parameter 最
  • 简单用用flex和bison

    简单用用flex和bison 参考博文 词法 语法分析器简介 定义 flex bison 文件间关系 具体例子 例1 输入name age时触发 输出name is age years old 例2 输入带有括号的满足乘法加法的表达式 输出
  • 有关ajax 不走回调函数的问题解析

    ajax是设置的返回值明明是json格式 但是返回值是json格式却接收不了 非要设置成text格式才可以接收的到 这是我的jQuery代码 function addSku id var m m id val var p p id val
  • JDBC(Java DataBase Connectivity)

    JDBC 目录 JDBC 简介 JDBC结构步骤 API接口 DriverManager Conection Statement ResultSet PreparedStatement 简介 JDBC是使用Java语言操作关系数据库的一套A
  • maven安装和环境变量配置

    myeclipse自带maven Maven4MyEclipse 创建项目 新建Web Projects项目 在新建的页面上打上maven的勾 新建的项目里会多出个pom xml文件 为项目添加依赖包 右键项目 选择Maven4MyEcli
  • 多对一查询

    是这样的 首先学生表中有三个属性 前两个属性要出现在结果集中 第三个属性哦用于查找教师的名字 然后呢 用resultMap重新处理 将老师的名字重新对应为学生表的第三个属性 其实这样做有局限 多对一查询 SQL语句 SELECT s id