数据准备

数据表

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 查询数据时属性中多对一的问题(多条数据对应一条数据)的更多相关文章

  1. mongo数据集合属性中存在点号(.)

    基本知识点: 1.似乎mongo3.6之前不允许插入带点(.)或美元符号($)的键,但是当我使用mongoimport工具导入包含点的JSON文件时,它工作正常. 2.在使用spring-data-m ...

  2. mybatis 查询返回的类型中字段类型为 List<xx>

    基本类型数组 mapper.xml <resultMap id="xxDtoResultMap" type="com.xx.xxDto"> < ...

  3. SqlBulkCopy 插入100W条数据时 属性BatchSize的作用

    (1)100W条insert语句在一个连接内一句一句加 花了01:17:19.0542805 (2) SqlBulkCopy 插入100W条数据 设置BatchSize=500 耗时:00:03:29 ...

  4. MyBatis 查询的时候属性名和字段名不一致的问题

    目录 问题 解决方案:resultMap 问题 当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题 数据库字段是 pwd id name pwd 1 张三 123456 2 李四 1234 ...

  5. MyBatis 查询记录时日期字段没有时分秒

    今天发现如果表里面的字段为Date类型时,程序查询出来的数据只有年月日 搜索了下,发现在resultMap里面把这个字段的jdbcType原先为Date,改为Timestamp就行了. 确实可以.

  6. 关于js全局变量数组push数据时dom中无数据的问题

    今天着实悲催,这问题整了好几个小时才解决.废话不多说,上问题. 一开始我定义了许多全局变量放在me下. var me = { dgOrderDetails: null, dgVisitNumbers: ...

  7. mybatis 查询sql时foreach使用法

    找到俩个例子摘下来 sql查询用户in传list参数 <select id="getEmpsByConditionForeach" resultType="com. ...

  8. js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用

    一,情况如下,这是成功代码: $(function () { $.ajax({ url: "Demo.aspx", type: "post", data: { ...

  9. sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时的感受

    sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时,mysql经常出现格式转换出错,不好导入  导入的数据量比较大时,还不如自己写个工具导入 今天在导oracle时,想 ...

随机推荐

  1. 纯css 实现文本换行

    业务场景:dialog中嵌套的表单,实现信息展示,由于存储路径过长并且在一行显示,导致多出的文字出现在弹出框外面了,页面极丑,所以需要将存储路径实现自动换行. 技术点:<p style=&quo ...

  2. 应用案例——高并发 WEB 服务器队列的应用

    在高并发 HTTP 反向代理服务器 Nginx 中,存在着一个跟性能息息相关的模块 - 文件缓存. 经常访问到的文件会被 nginx 从磁盘缓存到内存,这样可以极大的提高 Nginx 的并发能力,不过 ...

  3. proxySQL with MGR

    环境信息 hostname IP port role comm ms81 192.168.188.81 3399 master ms82 192.168.188.82 3399 slave ms83 ...

  4. mysql主从双机keepalived配置

    1.关闭selinux SELINUX=disabled 2.yum安装keepalived yum install -y keepalived 3.修改配置文件 主库配置文件: ! Configur ...

  5. 其它语言通过HiveServer2访问Hive

    先解释一下几个名词: metadata :hive元数据,即hive定义的表名,字段名,类型,分区,用户这些数据.一般存储关系型书库mysql中,在测试阶段也可以用hive内置Derby数据库. me ...

  6. Kylin的特点

    Kylin的特点 0.原理 从Hive读取数据,计算引擎可以用MapReduce 或者Spark, 把结果写入Hbase. 下次查询就会很快,也就是所谓的预计算. 1.为什么会有Kylin? hive ...

  7. python之代码重构

    在撸码过程中,总有很多代码需要重构,码一个问候用户的小例子,加深对代码重构的印象. 原始代码: 1 import json 2 3 filename = 'username.json' #定义文件名 ...

  8. NET 5 MemoryCache与Redis使用以及StackExchange.Redis和CSRedisCore

    简介以及区别 ASP.NET Core 缓存Caching,.NET Core 中为我们提供了Caching 的组件. 目前Caching 组件提供了三种存储方式. Memory Redis SqlS ...

  9. 配置redis服务器允许远程连接

    说明 默认情况下,redis只允许本机访问.如果需要外部访问,需要修改下配置文件. 配置修改 redis.windows.conf 将bind 127.0.0.1 注释 将protected-mode ...

  10. .NETCore使用EntityFrameworkCore连接数据库生成实体

    EF Core 通过数据库提供程序插件模型与 SQL Server/SQL Azure.SQLite.Azure Cosmos DB.MySQL.PostgreSQL 和更多数据库配合使用. 使用EF ...