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 查询数据时属性中多对一的问题(多条数据对应一条数据)的更多相关文章
- mongo数据集合属性中存在点号(.)
基本知识点: 1.似乎mongo3.6之前不允许插入带点(.)或美元符号($)的键,但是当我使用mongoimport工具导入包含点的JSON文件时,它工作正常. 2.在使用spring-data-m ...
- mybatis 查询返回的类型中字段类型为 List<xx>
基本类型数组 mapper.xml <resultMap id="xxDtoResultMap" type="com.xx.xxDto"> < ...
- SqlBulkCopy 插入100W条数据时 属性BatchSize的作用
(1)100W条insert语句在一个连接内一句一句加 花了01:17:19.0542805 (2) SqlBulkCopy 插入100W条数据 设置BatchSize=500 耗时:00:03:29 ...
- MyBatis 查询的时候属性名和字段名不一致的问题
目录 问题 解决方案:resultMap 问题 当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题 数据库字段是 pwd id name pwd 1 张三 123456 2 李四 1234 ...
- MyBatis 查询记录时日期字段没有时分秒
今天发现如果表里面的字段为Date类型时,程序查询出来的数据只有年月日 搜索了下,发现在resultMap里面把这个字段的jdbcType原先为Date,改为Timestamp就行了. 确实可以.
- 关于js全局变量数组push数据时dom中无数据的问题
今天着实悲催,这问题整了好几个小时才解决.废话不多说,上问题. 一开始我定义了许多全局变量放在me下. var me = { dgOrderDetails: null, dgVisitNumbers: ...
- mybatis 查询sql时foreach使用法
找到俩个例子摘下来 sql查询用户in传list参数 <select id="getEmpsByConditionForeach" resultType="com. ...
- js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用
一,情况如下,这是成功代码: $(function () { $.ajax({ url: "Demo.aspx", type: "post", data: { ...
- sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时的感受
sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时,mysql经常出现格式转换出错,不好导入 导入的数据量比较大时,还不如自己写个工具导入 今天在导oracle时,想 ...
随机推荐
- Css:常用的去除默认样式
*{ padding: 0; margin: 0; } ul,ol{ list-style: none; } a,a:hover,a:link,a:visited,a:active{ ...
- writeset参数配置探索——究竟在哪个角色上配置参数?
关于writeset,一直以来我都是所有节点同时配置下面参数: binlog_transaction_dependency_tracking=WRITESET transaction_write_se ...
- 使用MySQL Shell创建MGR
本篇知识点: 配置MGR所需的参数 使用MySQL Shell配置MGR shell.connect() var 设定临时变量 dba.createCluster() dba.getCluster() ...
- Mysql性能优化专栏
1. 最大数据量 Mysql没有对单表的数据量大小做限制,单表的大小取决于操作系统对文件大小的限制. <阿里巴巴Java开发手册>中建议当单表的数据量大小超过500万行或者大于2GB时需 ...
- feign代码自动生成插件
简介 feign对微服务之间的http调用做了一层封装,如果B项目想调用A项目的一个web服务,只需要编写对应的接口并标注FeignClient注解.但如果接口发生了变更,对应的Feign代码往往会忘 ...
- vue 循环结构 v-for
循环结构 v-for 循环数组 用于循环取得数据,类似于js中for-in循环 ,其中in左侧为值,其名称可以自定义,in后为想要取出数据的变量名 运行可以得到结果 in左侧不仅仅只可以放一个值,不仅 ...
- 嵌入式开发笔记——调试组件SEGGER_HardFaultHandle
一.前言 在使用Cortex-M内核的MCU进行开发时,有时候会因为对内存错误访问等原因造成程序产生异常从而进入HardFaultHandler错误中断.如果程序结构比较复杂,尤其是运行了RTOS时可 ...
- Spring Cloud Alibaba基础教程-Nacos(二)
在Spring Cloud Alibaba基础教程-Nacos(一)当中学习了,如何从 nacos当中 通过Java的方式获取值,以及连接数据库,下面我们开始第二篇的学习 ,如果对你有帮助,方便下次寻 ...
- Linux课程知识点总结(一)
Linux课程知识点总结(一) 一.Linux系统的简介 1.1 什么是Linux Linux是一个免费的多用户.多任务的操作系统,其运行方式.功能和Unix系统很相似,但Linux系统的稳定性.安全 ...
- C++libcurl的使用
一.libcurl描述: 在curl的官方网站 **http://curl.haxx.se/download.html** 提供编译好libcurl包, 最后写一个demod工程,演示下libcur ...