方法一 连接表查询

案例:查询所有订单信息及订单下的订单明细信息。
订单信息与订单明细为一对多关系。
使用resultMap实现如下:

  • Sql语句:
SELECT orders.*,user.username,user.address,orderdetail.id orderdetail_id,orderdetail.items_id,orderdetail.items_num
FROMorders,user,orderdetail
WHERE orders.user_id = user.id
AND orders.id = orderdetail.orders_id
  • 定义po类
    在Orders类中加入User属性。
    在Orders类中加入List orderdetails属性

  • Mapper.xml

<select id="findOrdersDetailList" resultMap="userorderdetailmap">SELECTorders.*,user.username,user.address,orderdetail.id orderdetail_id,orderdetail.items_id,orderdetail.items_numFROM orders,user,orderdetailWHERE orders.user_id = user.idAND orders.id = orderdetail.orders_id
</select>
  • 定义resultMap

collection部分定义了查询订单明细信息。
collection:表示关联查询结果集
property="orderdetails":关联查询的结果集存储在cn.itcast.mybatis.po.Orders上哪个属性。
ofType="cn.itcast.mybatis.po.Orderdetail":指定关联查询的结果集中的对象类型即List中的对象类型。
及的意义同一对一查询。

方法二 使用子查询

案例:查询所有动态以及对应的图片。
动态与图片为一对多关系。

使用resultMap实现如下:

  • Sql语句:
SELECT t_dynamics .dynamics_id "dynamicsId", t_dynamics .type "type", t_dynamics .title "title", t_dynamics .text "text", t_dynamics .pure_text "pureText", t_dynamics .origin "origin", t_dynamics .add_user "addUser", t_dynamics .add_date "addDate", t_dynamics .sort "sort"
FROM t_dynamics
WHERE 1=1 AND t_dynamics .type = ?
ORDER BY add_date ASC LIMIT 0,10 SELECT *
FROM t_attachment
WHERE content_id=?
  • 定义po类
    在DynamicsCustom类中加入List images属性

  • 数据库表

CREATE TABLE `t_dynamics` (`dynamics_id` varchar(50) NOT NULL COMMENT '动态表',`type` int(11) DEFAULT NULL COMMENT '类别(1.校园动态 2.捐赠动态)',`images` text COMMENT '图片url',`title` varchar(50) DEFAULT NULL COMMENT '标题',`text` text COMMENT '正文',`origin` varchar(50) DEFAULT NULL COMMENT '来源',`add_user` varchar(50) DEFAULT NULL COMMENT '添加人',`add_date` datetime DEFAULT NULL COMMENT '添加时间',`sort` int(11) DEFAULT NULL COMMENT '用于排序',`pure_text` text COMMENT '纯文本',PRIMARY KEY (`dynamics_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8CREATE TABLE `t_attachment` (`attachment_id` varchar(50) NOT NULL COMMENT '附件表',`content_id` varchar(50) DEFAULT NULL,`file_path` varchar(200) DEFAULT NULL COMMENT '文件路径',`narrow_image_path` varchar(200) DEFAULT NULL COMMENT '压缩图路径',`file_type` varchar(11) DEFAULT NULL COMMENT '文件类型: 头像:0;商品图片:1;捐赠物品图片:2;首页轮播图:3',PRIMARY KEY (`attachment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • Mapper.xml
    <sql id="findDynamicsSql">SELECT<include refid="FieldAlias"/>FROM <include refid="tableName"/></sql><!-- 按要求查找 1.校园动态 2.捐赠动态--><select id="findDynamicsByQueryCondition" resultMap="loadImagesByContentId" parameterType="QueryCondition"><include refid="findDynamicsSql"/>WHERE 1=1<if test="type != null and type != '' and type != 'all' ">AND <include refid="tableName"/>.${type} = #{queryValue}</if><if test="secondType != null and secondType != '' and secondType != 'all' ">AND <include refid="tableName"/>.${secondType} = #{secondQueryValue}</if><if test="secondType != null and secondType != '' and secondType != 'all' ">AND <include refid="tableName"/>.`title` like CONCAT(CONCAT('%', #{indistinctField}),'%')</if><if test="orderBy != null and orderBy != '' ">ORDER BY ${orderBy} ${order}</if>LIMIT ${index},${size}</select><!-- 查找 com.usedmarket.dao.AttachmentDao.findByContentId --><select id="findByContentId" resultType="Attachment">SELECT * FROM<include refid="tableName"></include>WHERE content_id=#{contentId}</select>
  • 定义resultMap
    <resultMap id="loadImagesByContentId" type="DynamicsCustom" autoMapping="true"><id column="dynamicsId" property="dynamicsId"/><collection property="images" javaType="ArrayList" ofType="Attachment" autoMapping="true" column="dynamicsId" select="com.usedmarket.dao.AttachmentDao.findByContentId"><id column="attachment_id" property="attachmentId"/></collection></resultMap>

转载于:https://www.cnblogs.com/huangmp1024/p/6131140.html

mybatis 高级映射 - 一对多查询 - collection相关推荐

  1. mybatis高级映射一对多查询(一)

    最近一直在研究mybatis,查询是并不可少的研究内容.mybatis的一对多的查询,个人觉得比hibernate简单的很多.好了,废话不多说了,下面以一个简单的例子解释一下mybatis的一对多的查 ...

  2. 【MyBatis框架】高级映射-一对多查询

    前面学习了一对一的查询,现在我们在刚才的数据模型基础上进行一对多的查询. 一对多查询 1.需求 查询订单及订单明细的信息. 2.sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查 ...

  3. mybatis高级映射多对多查询(二)

    在这篇博客中,我来介绍下mybatis中的多对多查询的案例,在mybatis中,如何使用ResultMap来实现多对多的查询? 案例:一个user可以有很多role,一个role可以有很多entitl ...

  4. mybatis高级映射(一对一,一对多,多对多)

    http://www.cnblogs.com/selene/p/4627446.html 阿赫瓦里 生命对于某些人来说,一直都是美丽的,因为这些人的一生都在为某个梦想而奋斗!!! 博客园 首页 新随笔 ...

  5. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  6. JavaWeb——mybatis一对一、一对多查询

    一.引言 mybatis查询基本返回数据基本用到的都是resulttype与resultmap,resulttype必须po类与sql字段一致,而resultmap可以不一致通过配置映射. 本篇文章一 ...

  7. 第五章.MyBatis高级映射

    5.1   新建数据库准备 CREATE TABLE `finacial_products` (`product_id` int(11) NOT NULL AUTO_INCREMENT,`name` ...

  8. mybatis教程--映射之一对一查询

    一对一查询 这里我们是在用户表,订单表,订单详情表,商品表的基础上进行讲解的.下面我也会把这四张表的po类列出来. 1.1 需求 查询订单信息关联查询用户信息 1.2 sql语句 查询语句: 先确定主 ...

  9. mybatis多条件批量查询_Mybatis【14】 Mybatis如何实现一对多查询?

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-10-one2many,需要自取,需要配置mave ...

最新文章

  1. linux服务器配置php mysql,Linux系统如何安装配置Apache+PHP+MySQL服务器环境
  2. python序列类型有_Python序列类型
  3. Cannot open the disk 'E:/vmware/Ubuntu.vmdk' or one of the snapshot disks it depends on. 解决方法
  4. c语言中 a6,C语言中的32个关键字
  5. mysql begin_MySQL 存储过程的 BEGIN 和 END
  6. matlab自定义颜色代码,自定义颜色为matlab表面图
  7. 中央财经大学研究生入学考试 901C语言程序设计
  8. 运营15年的飞扬军事论坛宣布停止运营 关闭服务器
  9. R包的安装以及安装失败的解决
  10. 无线路由器使用交换机模式上网不稳定
  11. unity3d 压缩文件夹和压缩文件
  12. macOS iOS - 系统版本、EFI 和 SMC 固件版本
  13. Qt面试笔试题问答经验总结
  14. arduino读取水位传感器的数据显示在基于i2c的1602a上_基于PC-CAN适配卡和总线技术实现潜水电机分布式监控系统的应用方案...
  15. 前端下载流文件xlsx表格方法
  16. 计算机表格如何求和,excel怎么求和,教您excel如何进行求和
  17. LTE学习笔记三:接口协议
  18. 【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )
  19. 系统分析技术简单介绍
  20. 采购IT外包服务的企业有哪些痛点?

热门文章

  1. 网页运行python脚本_python脚本和网页有何区别
  2. java堆栈方法区_java 栈 ,堆, 方法区
  3. java final 内存语义_final 域的内存语义
  4. Python-Matplotlib可视化(3)——自定义样式绘制精美统计图
  5. Python-Matplotlib可视化(1)——一文详解常见统计图的绘制
  6. java包装_Java罐密封包装
  7. python字符串追加字符_Python字符串追加
  8. 浅析HTML5高薪的原因所在
  9. web前端面试:不做面试“海王”,一份资料就可成功上岸!
  10. 2021年互联网公司春招有何新变化?大厂要求是这样!