resultMap标签中里的collection标签详解

 更新时间:2022年02月07日 09:41:11   作者:我不会写代码啊啊啊  
这篇文章主要介绍了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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于java实现DFA算法代码实例

    基于java实现DFA算法代码实例

    这篇文章主要介绍了基于java实现DFA算法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java基础语法:逻辑控制

    Java基础语法:逻辑控制

    下面小编就为大家带来一篇Java逻辑控制的基础文章。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-08-08
  • Java中典型的内存泄露问题和解决方法

    Java中典型的内存泄露问题和解决方法

    这篇文章主要介绍了Java中典型的内存泄露问题和解决方法,典型的内存泄露例子是一个没有实现hasCode和 equals方法的Key类在HashMap中保存的情况,可以通过实现Key类的equals和hasCode方法解决这种内存泄漏问题,需要的朋友可以参考下
    2014-04-04
  • Java实现飞机大战-II游戏详解

    Java实现飞机大战-II游戏详解

    《飞机大战-II》是一款融合了街机、竞技等多种元素的经典射击手游。游戏是用java语言实现,采用了swing技术进行了界面化处理,感兴趣的可以了解一下
    2022-02-02
  • Java Fluent Mybatis 分页查询与sql日志输出详解流程篇

    Java Fluent Mybatis 分页查询与sql日志输出详解流程篇

    Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。国内又以Mybatis用的多,基于mybatis上的增强框架,又有mybatis plus和TK mybatis等。今天我们介绍一个新的mybatis增强框架 fluent mybatis关于分页查询、sql日志输出流程
    2021-10-10
  • springboot高并发下提高吞吐量的实现

    springboot高并发下提高吞吐量的实现

    这篇文章主要介绍了springboot高并发下提高吞吐量的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)

    Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)

    本篇文章主要介绍了Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • Java使用poi导出ppt文件的实现代码

    Java使用poi导出ppt文件的实现代码

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java对Microsoft Office格式档案读和写的功能。本文给大家介绍Java使用poi导出ppt文件的实现代码,需要的朋友参考下吧
    2021-06-06
  • Selenium处理select标签的下拉框

    Selenium处理select标签的下拉框

    Selenium是一个开源的和便携式的自动化软件测试工具,用于测试Web应用程序有能力在不同的浏览器和操作系统运行。接下来通过本文给大家介绍Selenium处理select标签的下拉框,需要的朋友一起学习吧
    2016-04-04
  • Java如何使用流去除集合中某个字段为空的对象

    Java如何使用流去除集合中某个字段为空的对象

    这篇文章主要给大家介绍了关于Java如何使用流去除集合中某个字段为空的对象,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友可以参考下
    2023-08-08

最新评论