我的编程空间,编程开发者的网络收藏夹
学习永远不晚

resultMap标签中里的collection标签详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

resultMap标签中里的collection标签详解

resultMap标签中的collection标签

collection(一对多)

元素的作用和association元素的作用差不多一样,事实上,它们非常类似,也是映射到JavaBean的某个“复杂类型” 属性,只不过这个属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型(集合)。和使用association元素一样,我们使用嵌套查询, 或者从连接中嵌套结果集。

下面通过一个示例来演示coeltien 的具体应用,示例需求获取指定用户的相关的信息和地址列表。

我们有实体类Employee如下:

package com.xyj.entity;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
	private int eid;
	private String ename;
	private String epwd;
	private String address;
	private String tel;
	private List<Sport> sports;//职员所参加的所有运动项目
}

员工间举行了一个小型运动会,又有Sport实体类如下:

package com.xyj.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Sport {
    private int sportId;
    private String sportName;
    private String sportScore;
}

可知一个员工可以参加多个运动项目,所以我们的Employee对象内部嵌套了一个复杂数据类型的属性,sports,接下来在EmpDao接口中添加根据职员id获取职员参加的项目列表的方法,代码如下:

List<Employee> findSportsInfoByEmpId(@Param("eid")Integer id);

修改对应的映射文件,由于Employee内部嵌套了集合对象,因此需要使用collection来实现结果映射,实例代码如下:

<select id="findSportsInfoByEmpId" resultMap="empmap">
        select e.*,s.*
        from employee as e,sport as s
        where e.eid=s.eid
        and e.eid=#{eid}
    </select>
    
    <resultMap type="Employee" id="empmap">
        <id property="eid" column="eid"/>
        <result property="ename" column="ename"/>
        <result property="epwd" column="epwd"/>
        <result property="address" column="address"/>
        <result property="tel" column="tel"/>
        <!-- collection描述一对多的关系,ofType是集合所包含的类型,可以写完整Java类名或别名  -->
        <collection property="sports" ofType="Sport">
            <id property="sportId" column="sportid"/>
            <result property="sportName" column="sportname"/>
            <result property="sportScore" column="sportscore"/>
        </collection>
    </resultMap>

最后进行测试,查看结果是否正确:

@org.junit.Test
    public void test() {
        SqlSession session = MyBatisUtils.getSqlSession();
        EmpDao ed = session.getMapper(EmpDao.class);
        List<Employee> list = ed.findSportsInfoByEmpId(1);
        for (Employee emp : list) {
            for (Sport e : emp.getSports()) {
                System.out.println(e);
            }
        }
    }

运行结果: 

在这里插入图片描述

查询成功,但是我们的collection标签写在resultMap标签的内部,不能达到复用,当然是可以复用的,只需修改代码如下:

<select id="findSportsInfoByEmpId" resultMap="empmap">
		select e.*,s.*
		from employee as e,sport as s
		where e.eid=s.eid
		and e.eid=#{eid}
	</select>
	
	<resultMap type="Employee" id="empmap">
		<id property="eid" column="eid"/>
		<result property="ename" column="ename"/>
		<result property="epwd" column="epwd"/>
		<result property="address" column="address"/>
		<result property="tel" column="tel"/>
		<collection property="sports" ofType="Sport" resultMap="sportmap"></collection>
	</resultMap>
	
	<resultMap type="Sport" id="sportmap">
		<id property="sportId" column="sportid"/>
		<result property="sportName" column="sportname"/>
		<result property="sportScore" column="sportscore"/>
	</resultMap>

collection标签中各属性的说明

<result column="name" property="name"/>
<!--
collection定义一个子集合对象返回
ofType:指定集合里面元素的类型
property属性设置集合的属性名
-->
<collection property="passengers" ofType="Passenger">
<!--
id指的是主键,
column是数据库中的列,可以是别名
property映射的是实体类中的属性
result是普通列(非主键)
-->
<id column="pid" property="id"/>
<result column="pname" property="name"/>
</collection>
</resultMap>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

resultMap标签中里的collection标签详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MyBatis中的ResultMap的association和collection标签详解

这篇文章主要介绍了MyBatis中的ResultMap的association和collection标签详解,主要包括association标签常用参数及id&result标签参数详解,本文给大家介绍的非常详细,需要的朋友可以参考下
2022-11-13

MyBatis之ResultMap的Association和Collection标签详解

我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。而 ResultMap 就是 MyBatis 对这个问题的答案。

resultMap中的collection标签怎么用

这篇文章主要介绍“resultMap中的collection标签怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“resultMap中的collection标签怎么用”文章能帮助大家解决问题。re
2023-06-29

html中object标签详解

HTML中的标签用于嵌入外部资源,如图像、音频、视频、Flash等,并在页面上显示这些资源,提供了一种通用的方式来嵌入各种不同类型的媒体资源,标签语法为”
html中object标签详解
2024-01-25

Git Tag 标签详解

Git Tag 标签 git tag 按字母排序显示标签 git tag v1.01 打上v1.01这个标签 git show v1.01 显示这个标签的详情 可以同时打多个tag指向同一个时间点上的版本 git push origin -
2022-06-04

Kubernetes(k8s)标签详解

所谓标签就是指一个键值数据,在 k8s 上任何资源都可以拥有标签;我们可以在创建资源时在配置清单中指定,也可以创建好资源以后再使用命令添加标签。

HTML中link标签属性详解

在HTML中,link标签是一个自闭合元素,通常位于文档的head部分。它用于建立与外部资源的关联,如样式表、图标等。link标签具有多个属性,其中rel和href是最常用的,文中有详细的代码示例,感兴趣的同学可以参考阅读
2023-05-18

Mybatis resultMap标签继承、复用、嵌套的方法

本篇内容主要讲解“Mybatis resultMap标签继承、复用、嵌套的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis resultMap标签继承、复用、嵌套的方法”吧!re
2023-06-29

html中p标签和h标签的区别

html 中 p 标签用于创建段落,而 h 标签用于创建标题。p 标签的语法为 ,而 h 标签的语法为 (n 为标题级别)。p 标签显示为缩进的文本,h 标签显示为较大、更粗的文本。此外,h 标签有不同的级别(1 到 6),可以创建目录结
html中p标签和h标签的区别
2024-04-27

html include标签的用法详解

HTML的include标签是一种用于在HTML文件中包含其他文件内容的标签,它可以将一个外部文件的内容嵌入到当前的HTML文件中。include标签的用法如下:1. 在需要包含文件的位置,使用include标签,并设置src属性为要包含的
2023-08-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录