使用resultMap实现ibatis复合数据结构查询(1.多重属性查询;2.属性中含有列表查询)
以订单为例(订单详情包括了订单的基本信息,配送物流信息,商品信息),直接上代码:
1.多重属性查询
java实体
- public class OrderDetail {
- @XmlElement(required = true)
- protected String orderSn;
- @XmlElement(required = true)
- protected String orderAmount;
- @XmlElement(required = true)
- protected String orderStatus;
- @XmlElement(required = true)
- protected String orderAddTime;
- @XmlElement(required = true)
- protected Logistics logistics;
- @XmlElement(required = true)
- protected OrderGoods orderGoods;
- @XmlElement(required = true)
- protected List<OrderDetail> listData;
- <pre name="code" class="java"> ... getter and setter...
- }
class="orderDetail" 即为上面的类,有个属性logistics的类型是复合类型Logistics
以下是订单详情的resultMap:
- <resultMap id="OrderInfoMap" class="orderDetail">
- <result property="orderSn" column="orderSn"/>
- <result property="orderAmount" column="orderAmount"/>
- <result property="orderStatus" column="orderStatus"/>
- <result property="orderStatus" column="orderAddTime"/>
- <result property="logistics.consignee" column="consignee"/>
- <!-- <result property="logistics.receiver" column="receiver"/> -->
- <result property="logistics.country" column="country"/>
- <result property="logistics.province" column="province"/>
- <result property="logistics.city" column="city"/>
- <result property="logistics.district" column="district"/>
- <result property="logistics.address" column="address"/>
- <result property="logistics.mobile" column="mobile"/>
- <result property="logistics.shippingName" column="shippingName"/>
- <result property="orderGoods.listData" select="wxShopOrder.getOrderGoodsList"
- column="orderSn"/>
- </resultMap>
当中"<result property="logistics.consignee" column="consignee"/> ",logistics.consignee就能够用对象訪问的写法来查询,consignee是logistics的属性,logistics是orderDetail的属性.注意:column的名称应该与sql语句查询的列名一致.
sql查询语句例如以下:
- <select id="getOrderDetail" parameterClass="string" resultMap="OrderInfoMap" >
- select
- order_sn as orderSn,
- order_amount as orderAmount,
- order_status as orderStatus,
- add_time as orderAddTime,
- consignee,
- country,
- b.region_name province,
- c.region_name city,
- d.region_name district,
- address,
- mobile,
- shipping_name as shippingName
- from ecs_order_info o
- left join ecs_region b on o.province=b.region_id
- left join ecs_region c on o.city=c.region_id
- left join ecs_region d on o.district=d.region_id
- where order_sn=#orderSn#
- </select>
2.属性中含有列表查询
orderDetail有个属性orderGoods的类型是List复合类型,应在resultMap的属性定义中加入属性select="getOrderGoodsList",getOrderGoodsList也是一个sql查询
- <result property="orderGoods.listData" select="wxShopOrder.getOrderGoodsList" column="orderSn"/>
注意:上面column="orderSn"指的是orderSn作为sql的查询參数. 看下这个 getOrderGoodsList查询
- <!-- 通过订单号获取订单商品列表 -->
- <select id="getOrderGoodsList" parameterClass="string" resultMap="orderGoodsMap">
- select goods_name as goodsName,
- goods_number as goodsNumber
- from ecs_order_goods where order_id=
- (select order_id from ecs_order_info where order_sn=#orderSn#)
- </select>
使用resultMap实现ibatis复合数据结构查询(1.多重属性查询;2.属性中含有列表查询)的更多相关文章
- LINQ查询表达式(2) - 在 C# 中编写 LINQ 查询
在 C# 中编写 LINQ 查询 C# 中编写 LINQ 查询的三种方式: 使用查询语法. 使用方法语法. 组合使用查询语法和方法语法. // 查询语法 IEnumerable<int> ...
- Redis使用场景一,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。
maven使用: <!--redis jar包--> <dependency> <groupId>redis.clients</groupId> < ...
- 简版会员私信表设计及sql 私信列表查询
先上下表结构和数据 DROP TABLE IF EXISTS `message`; CREATE TABLE `message` ( `id` int(11) NOT NULL AUTO_INCREM ...
- 商城02——dubbo框架整合_商品列表查询实现_分页
1. 课程计划 1.服务中间件dubbo 2.SSM框架整合. 3.测试使用dubbo 4.后台系统商品列表查询功能实现. 5.监控中心的搭建 2. 功能分析 2.1. 后台系统所用的技术 框 ...
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...
- Hive 中的复合数据结构简介以及一些函数的用法说明
参见下面这篇博客: Hive 中的复合数据结构简介以及一些函数的用法说明
- 《Entity Framework 6 Recipes》中文翻译系列 (19) -----第三章 查询之使用位操作和多属性连接(join)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-16 过滤中使用位操作 问题 你想在查询的过滤条件中使用位操作. 解决方案 假 ...
- Mybatis中的in查询和foreach标签
Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...
- MyBatis 中使用数据库查询别名进行映射
方法1 XXMapper.xml <mapper namespace="com.hfepc.dao.andon.AndonExceptionKanbanVOMapper" & ...
随机推荐
- Maven+Docker,发布到Registry
1.配置Pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEnc ...
- linq 分组
var data = from r in listRecords group r by new { r.CampaignId, r.CityId, r.Gift_DistributorId, r.Pr ...
- python--9、进程及并发知识
进程 一个文件的正在执行.运行过程就成为一个进程.执行多个程序,把程序文件都加载到内存,并且多个程序的内存空间隔离--空间上的复用. 遇到IO等待,切CPU到别的程序,提升效率.没有IO,一个程序占用 ...
- 精美对UI设计界面赏析
最美的UI设计界面赏析 . 喜欢就关注我吧
- 一篇文章告诉你如何使用EF CodeFirst做增删改查
一.修改数据 其实修改涉及的内容挺多的,是相对于其他操作来说比较繁琐.也是本文的重头戏. 虽然都是基础内容,但是也是值得细细品味的. 1.最简单直接的修改数据就是从数据库里检索出数据修改相应的字段即可 ...
- Spring的核心机制依赖注入
原文地址:http://developer.51cto.com/art/200610/33311.htm 本文主要讲解依赖注入(设值注入.构造注入),作用是可以使Spring将各层的对象以松耦合的方式 ...
- Operation Queues 面向对象的封装
Operation Queues An operation queue is the Cocoa equivalent of a concurrent dispatch queue and is im ...
- jinkins配置python虚拟环境
cd /root/.virtualenvs . automationVenv/bin/activate cd /home/wangju/gitProject/automationtest#cd pyt ...
- ffmpeg从内存读取文件
正常情况,ffmpeg直接从文件读取 AVFormatContext * _ctx = NULL; avformat_open_input(&_ctx, _filePath, 0, 0); 我 ...
- 用 foreach()循环三维数组
<?php $data = array( 0 => array( '中国' => 'china', '美国' => 'usa', '德国' => ' Germany', ...