MyBatis14:通过collection解决一对多的映射关系

已知,一个部门对应多个员工

现要求,根据部门Id,获取部门信息和部门员工信息

下面的例子并非是部门和员工,但差不多的

下方例子存在提供商(SmbmsProvider)和订单(SmbmsBill)

要求通过提供商id获取提供商信息和订单信息(订单中可能有多个商品)

对象

接口

public SmbmsProvider getOrderByProviderId(@Param("pid") String pid);

映射文件

<!--    public SmbmsProvider getOrderByProviderId(@Param("pid") String pid);-->
<resultMap id="getOrderByPid" type="SmbmsProvider">
<id property="id" column="id"/>
<result property="proName" column="proName"/>
<collection property="smbmsBills" ofType="SmbmsBill">
<id property="billCode" column="billCode"/>
<result property="productName" column="productName"/>
<result property="billCode" column="billCode"/>
<result property="totalPrice" column="totalPrice"/>
<result property="isPayment" column="isPayment"/>
</collection>
</resultMap>
<select id="getOrderByProviderId" resultMap="getOrderByPid">
select * from smbms_provider left join smbms_bill on smbms_provider.id=smbms_bill.providerId where smbms_provider.id=#{pid}
</select>

测试

    @Test
public void getBillsByProviderId(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
providerMapper mapper = sqlSession.getMapper(providerMapper.class);
SmbmsProvider result = mapper.getOrderByProviderId("2");
System.out.println(result);
System.out.print("公司名字:"+result.getProName()+"\n");
for(SmbmsBill bill:result.getSmbmsBills()){
System.out.print(" | 订单号:"+bill.getBillCode());
System.out.print(" | 商品名称:"+ bill.getProductName());
System.out.print(" | 商品价格:"+bill.getTotalPrice());
String st=(bill.getIsPayment()==2)?"已付款":"未付款";
System.out.println(" | 付款状态:"+ st);
}
}

总结

collection:处理一对多映射关系

--| oftype:表示该属性所对应集合中存储的数据的类型

注意事项

上述两个Id不能相同,否则会出现,查询到多条数据,但只返回一条的情况。


【Mybatis】学习笔记01:连接数据库,实现增删改

【Mybatis】学习笔记02:实现简单的查

【MyBatis】学习笔记03:配置文件进一步解读(非常重要)

【MyBatis】学习笔记04:配置文件模板

【MyBatis】学习笔记05:获取参数值的两种方式

【MyBatis】学习笔记06:各种查询所返回数据的数据类型

【MyBatis】学习笔记07:模糊查询

【MyBatis】学习笔记08:批量删除

【MyBatis】学习笔记09:批量删除

【MyBatis】学习笔记10:添加功能获取自增的主键

【MyBatis】学习笔记11:解决字段名和属性的映射关系

【MyBatis】学习笔记12:通过级联属性赋值解决多对一的映射关系

【MyBatis】学习笔记13:延迟加载(懒加载)

【MyBatis】学习笔记14:通过collection解决一对多的映射关系的更多相关文章

  1. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  2. Mybatis学习笔记14 - 动态sql之foreach标签

    一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...

  3. Mybatis学习笔记二

    本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...

  4. 【MyBatis学习笔记】

    [MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...

  5. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

  6. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

  7. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

  8. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  9. SQL反模式学习笔记14 关于Null值的使用

    目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...

  10. mybatis学习笔记(五):mybatis 逆向工程

    mybatis学习笔记(五):mybatis 逆向工程 在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生 ...

随机推荐

  1. python处理nii文件

    第一步安装nibabel,可以使用命令:pip install nibabel 之后: from nibabel.viewers import OrthoSlicer3D as osdimport n ...

  2. Excel读写之xlrd模块

    1.1.xlrd模块介绍 xlrd:用于读取Excle数据文件将返回的数据对象放到内存中,然后查询数据文件对象的相关信息. xlwt:用于在内存中生成新的数据文件对象,处理完成后写入到Excel数据文 ...

  3. 云原生周刊:Artifact Hub 成为 CNCF 孵化项目|2024.9.23

    开源项目推荐 Coroot Coroot 是一个开源监控工具,旨在为云原生应用提供可观察性.它通过整合指标.日志和追踪信息,专注于提供应用性能的洞察. DirectPV DirectPV 是一个开源项 ...

  4. 第147篇:微信小程序开发中Promise的使用(aysnc,await)

    好家伙, 0.错误描述 今天在开发中犯了一个比较严重的错误 对于Promise的错误使用 场景: 微信小程序中展示搜索条件列表 // API请求工具函数 const apiRequest = (url ...

  5. python-mongodb简单封装

    #!/usr/bin/python # -*- coding: UTF-8 -*- '''@auther :mr.qin @IDE:pycharm''' import pymongo from too ...

  6. linux 基础(5)文件的打包和压缩

    文件的压缩是非常重要和常见的操作. 在 Windows 下,zip 和 rar 经常使用的压缩软件,框选一堆文件,右键用 WinRAR 就可以完成压缩.不过在 linux 下通常不这么做.一是因为 l ...

  7. vue3 使用swiper轮播组件

    本地环境信息 node版本: nodejs : v18.20.4 npm : 10.7.0 vue版本 "dependencies": { "vue": &qu ...

  8. css常用布局之flex布局

    Flexbox 是一个一维的布局模式,它可以轻松地在不同的方向上排列子元素(称为 flex 项),即使它们的大小是未知或者是动态变化的.以下是 Flexbox 的一些关键概念: 容器和项: 启用 Fl ...

  9. 从0.1开始学java(2)

    string串池 现在都在堆中 "=="号的比较 字符串比较一般调用equals或者equalsignoreCase API来比较(后者忽略大小写) StringBuilder 可 ...

  10. 【转载】 TensorFlow中CNN的两种padding方式“SAME”和“VALID”

    原文地址: http://blog.csdn.net/wuzqchom/article/details/74785643 --------------------------------------- ...