关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)

 更新时间:2021年01月18日 16:32:42   作者:jiawei3998  
这篇文章主要介绍了MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

数据准备

数据表

CREATE TABLE `teacher`(
 id INT(10) NOT NULL,
 `name` VARCHAR(30) DEFAULT NULL,
 PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


INSERT INTO `teacher`(id,`name`) VALUES(1,'大师');

CREATE TABLE `student`(
 id INT(10) NOT NULL,
 `name` VARCHAR(30) DEFAULT NULL,
 `tid` INT(10) DEFAULT NULL,
 PRIMARY KEY(id),
 KEY `fktid` (`tid`),
 CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO student(`id`,`name`,`tid`) VALUES(1,'小明',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(2,'小红',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(3,'小张',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(4,'小李',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(5,'小王',1);

Teacher 类

public class Teacher {
  private int id;
  private String name;
}

Student 类

public class Student {
  private int id;
  private String name;

  private Teacher teacher;
}

查询接口

public interface StudentMapper {
  // 查询嵌套处理 - 子查询
  List<Student> getStudentList();

  // 结果嵌套处理
  List<Student> getStudentResult();
}

查询嵌套处理(子查询)

思路:先查询出所有学生的数据,再根据学生中关联老师的字段 tid 用一个子查询去查询老师的数据

association:处理对象

property:实体类中属性字段

column:查询结果中需要传递给子查询的字段

javaType:指定实体类

select:子查询SQL

<mapper namespace="com.pro.dao.StudentMapper">
  <!--
  按照查询嵌套处理
    1. 先查询所有学生信息
    2. 根据查询出来学生的tid, 接一个子查询去查老师
  -->
  <resultMap id="StudentTeacher" type="com.pro.pojo.Student">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <!--复杂属性需要单独处理, 对象: association, 集合: collection -->
    <association property="teacher" column="tid" javaType="com.pro.pojo.Teacher" select="getTeacher"/>
  </resultMap>

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

  <select id="getTeacher" resultType="com.pro.pojo.Teacher">
    select * from teacher where id = #{id}
  </select>
</mapper>

结果嵌套处理

思路:先把所有的信息一次性查询处理, 然后配置字段对应的实体类, 使用 association 配置

association:处理对象

property:实体类中属性字段

javaType:指定实体类

<mapper namespace="com.pro.dao.StudentMapper">
  <!--
  按照结果嵌套处理
    1. 一次查询出所有学生和老师的数据
    2. 根据查询的结果配置 association 对应的属性和字段
  -->
  <resultMap id="StudentResult" type="com.pro.pojo.Student">
    <result column="sid" property="id"/>
    <result column="sname" property="name"/>
    <!-- 根据查询出来的结果, 去配置字段对应的实体类 -->
    <association property="teacher" javaType="com.pro.pojo.Teacher">
      <result column="tname" property="name"/>
    </association>
  </resultMap>

  <select id="getStudentResult" resultMap="StudentResult">
    SELECT s.id sid, s.name sname, t.name tname FROM student s, teacher t WHERE s.tid = t.id
  </select>
</mapper>

到此这篇关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)的文章就介绍到这了,更多相关MyBatis 查询数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用JDBC实现数据访问对象层(DAO)代码示例

    使用JDBC实现数据访问对象层(DAO)代码示例

    这篇文章主要介绍了使用JDBC实现数据访问对象层(DAO)代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • hibernate框架环境搭建具体步骤(介绍)

    hibernate框架环境搭建具体步骤(介绍)

    下面小编就为大家带来一篇hibernate框架环境搭建具体步骤(介绍)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • SpringBoot jackson 精度处理问题解决

    SpringBoot jackson 精度处理问题解决

    由于JavaScript处理的最大数值限制,较大的雪花ID在JS中容易溢出,为解决此问题,可在SpringMVC或SpringBoot中使用@RequestBody注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Spring@Value属性注入使用方法解析

    Spring@Value属性注入使用方法解析

    这篇文章主要介绍了Spring@Value属性注入使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • java提高篇(二三)-----HashMap详解

    java提高篇(二三)-----HashMap详解

    HashMap基于哈希表的 Map 接口的实现,本篇文章主要讲诉了java中HashMap,有兴趣的可以了解一下。
    2016-11-11
  • SpringBoot整合Sharding-JDBC实现MySQL8读写分离

    SpringBoot整合Sharding-JDBC实现MySQL8读写分离

    本文是一个基于SpringBoot整合Sharding-JDBC实现读写分离的极简教程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的可以了解一下
    2021-07-07
  • 一篇文章带你入门java泛型

    一篇文章带你入门java泛型

    这篇文章主要介绍了java泛型基础知识及通用方法,从以下几个方面介绍一下java的泛型: 基础, 泛型关键字, 泛型方法, 泛型类和接口,感兴趣的可以了解一下
    2021-08-08
  • Java SSM实现前后端协议联调详解下篇

    Java SSM实现前后端协议联调详解下篇

    首先我们已经知道,在现在流行的“前后端完全分离”架构中,前后端联调是一个不可能避免的问题,这篇文章主要介绍了Java SSM实现前后端协议联调过程
    2022-08-08
  • Java 实战项目锤炼之网上花店商城的实现流程

    Java 实战项目锤炼之网上花店商城的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+jsp+servlet+mysql+ajax实现一个网上花店商城系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java中ByteBuddy动态字节码操作库的使用技术指南

    Java中ByteBuddy动态字节码操作库的使用技术指南

    ByteBuddy 是一个功能强大的 Java 字节码操作库,可以帮助开发者在运行时动态生成和修改类,而无需直接接触复杂的 ASM API,本文给大家介绍了Java ByteBuddy动态字节码操作库的使用技术指南,需要的朋友可以参考下
    2025-04-04

最新评论