Mybatis中的延迟加载的使用方法
Mybatis中的延迟加载的使用方法
在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml配置如下
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.taotao.store.order.mapper.OrderMapper"><sqlid="tableName">tb_order</sql><resultMaptype="Order"id="pojoResultMap"autoMapping="true"><idcolumn="order_id"property="orderId"/><associationproperty="orderShipping"javaType="OrderShipping"column="order_id"select="queryOrderShippingByOrderId"autoMapping="true"></association><collectionproperty="orderItems"javaType="Arraylist"ofType="OrderItem"autoMapping="true"select="queryOrderItemByOrderId"column="order_id"></collection></resultMap><selectid="queryOrderItemByOrderId"resultType="OrderItem"parameterType="String">SELECT * FROM tb_order_item WHERE order_id = #{orderId};</select><selectid="queryOrderShippingByOrderId"resultType="OrderShipping"parameterType="String">SELECT * FROM tb_order_shipping WHERE order_id = #{orderId};</select><selectid="queryList"resultMap="pojoResultMap">SELECT*FROM<includerefid="tableName"/></select><selectid="queryByID"resultMap="pojoResultMap">SELECT*FROM<includerefid="tableName"/>WHERE order_id = #{id};</select><selectid="queryByWhere"parameterType="Where"resultMap="pojoResultMap">SELECT*FROM<includerefid="tableName"/>WHERE ${where.column} ${where.operater} #{where.value} LIMIT 1;</select><selectid="queryListByWhere"parameterType="Where"resultMap="pojoResultMap">SELECT*FROM<includerefid="tableName"/>WHERE ${where.column} ${where.operater} #{where.value};</select><insertid="save">INSERT INTO <includerefid="tableName"/> VALUES (#{orderId},#{payment},#{paymentType},#{postFee},#{status},#{createTime},#{updateTime},#{paymentTime},#{consignTime},#{endTime},#{closeTime},#{shippingName},#{shippingCode},#{userId},#{buyerMessage},#{buyerNick},#{buyerRate});INSERT INTO tb_order_item VALUES<foreachcollection="orderItems"item="item"separator=",">(#{item.itemId},#{orderId},#{item.num},#{item.title},#{item.price},#{item.totalFee},#{item.picPath})</foreach>;INSERT INTO tb_order_shipping VALUES (#{orderId},#{orderShipping.receiverName},#{orderShipping.receiverPhone},#{orderShipping.receiverMobile},#{orderShipping.receiverState},#{orderShipping.receiverCity},#{orderShipping.receiverDistrict},#{orderShipping.receiverAddress},#{orderShipping.receiverZip},NOW(),NOW());</insert><updateid="update">UPDATE <includerefid="tableName"/><set><iftest="payment !=null and payment != ''">payment = #{payment},</if><iftest="postFee !=null and postFee != ''">post_fee = #{postFee},</if><iftest="status !=null and status != ''">status = #{status},</if><iftest="updateTime !=null and updateTime != ''">update_time = #{updateTime},</if><iftest="paymentTime !=null and paymentTime != ''">payment_time = #{paymentTime},</if><iftest="consignTime !=null and consignTime != ''">consign_time = #{consignTime},</if><iftest="endTime !=null and endTime != ''">end_time = #{endTime},</if><iftest="closeTime !=null and closeTime != ''">close_time = #{closeTime},</if><iftest="shippingName !=null and shippingName != ''">shipping_name = #{shippingName},</if><iftest="shippingCode !=null and shippingCode != ''">shipping_code = #{shippingCode},</if><iftest="buyerMessage !=null and buyerMessage != ''">buyer_message = #{buyerMessage},</if><iftest="buyerRate !=null and buyerRate != ''">buyer_rate = #{buyerRate},</if></set>WHERE order_id = #{orderId};</update><deleteid="deleteByID"parameterType="Long">DELETE FROM <includerefid="tableName"/> WHERE order_id = #{orderId};DELETE FROM tb_order_item WHERE order_id = #{orderId};</delete><deleteid="deleteByIDS"parameterType="list">DELETE FROM <includerefid="tableName"/> WHERE order_id IN<foreachcollection="ids"item="id"open="("close=")"separator=",">#{id}</foreach>;DELETE FROM tb_order_item WHERE order_id IN<foreachcollection="ids"item="id"open="("close=")"separator=",">#{id}</foreach>;</delete><updateid="paymentOrderScan"parameterType="Date">UPDATE tb_order SETstatus = 6,update_time = NOW(),close_time = NOW(),end_time = NOW()WHERE status = 1 AND payment_type = 1 AND create_time <= #{date}</update></mapper>
其中此代表延迟加载
<resultMaptype="Order"id="pojoResultMap"autoMapping="true"><idcolumn="order_id"property="orderId"/><associationproperty="orderShipping"javaType="OrderShipping"column="order_id"select="queryOrderShippingByOrderId"autoMapping="true"></association><collectionproperty="orderItems"javaType="Arraylist"ofType="OrderItem"autoMapping="true"select="queryOrderItemByOrderId"column="order_id"></collection></resultMap>
调用方法:
http://order.taotao.com/order/query/31537859410409
返回数据JSON
{"orderId":"31537859410409","payment":"5288","paymentType":null,"postFee":"0","status":1,"createTime":1537859410000,"updateTime":1537859410000,"paymentTime":null,"consignTime":null,"endTime":null,"closeTime":null,"shippingName":null,"shippingCode":null,"userId":3,"buyerMessage":null,"buyerNick":"zhang123","buyerRate":0,"orderItems":[{"itemId":9,"orderId":"31537859410409","num":1,"title":"苹果(Apple)iPhone 6 (A1586) 16GB 金色 移动联通电信4G手机3","price":5288,"totalFee":5288,"picPath":"http://image.taotao.com/images/2015/03/06/2015030610045320609720.jpg"}],"orderShipping":{"orderId":"31537859410409","receiverName":"张志君","receiverPhone":"","receiverMobile":"15800000000","receiverState":"上海","receiverCity":"上海","receiverDistrict":"闵行区","receiverAddress":"三鲁公路3279号 明浦广场 3号楼 205室","receiverZip":"200000","created":1537859410000,"updated":1537859410000}}
查询出的结果包括订单信息以及订单商品信息还有快递信息
主要内容是根据传智播客视频学习总结的小结。
Mybatis中的延迟加载的使用方法的更多相关文章
- 【MyBatis学习11】MyBatis中的延迟加载
1. 什么是延迟加载 举个例子:如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 所以延迟加载即先从单表 ...
- mybatis中的延迟加载
一.延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 延迟加载:先 ...
- @MyBatis中的if...else...
<select id="selectSelective" resultMap="xxx" parameterType="xxx"> ...
- mybatis 中 if else 用法
mybaits 中没有 else 要用 chose when otherwise 代替 下面就是MyBatis中的if....else...表示方法 <choose> <when t ...
- Mybatis中的N+1问题与延迟加载
0.什么是N+1问题? 在查询中一下子取出所有属性,就会使数据库多执行几条毫无意义的SQL .实际中不需要把所有信息都加载进来,因为有些信息并不常用,加载它们会多执行几条毫无用处的 SQL,导致数据库 ...
- Mybatis中配置Mapper的方法
在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://haohaoxuexi.iteye.com/blog/1333271. 我们知道在M ...
- mybatis中的updateByExampleSelective方法怎么使用
mybatis中的updateByExampleSelective方法怎么使用.sendDetailMapper.updateByExampleSelective(sendDetail, m);参数m ...
- 【mybatis】mybatis中避免where空条件后面添加1=1垃圾条件的 优化方法
在mybatis中拼接查询语句,偶尔会出现where后面可能一个字段的值都没有,就导致所有条件无效,导致where没有存在的意义:但也有可能这些条件会存在.那解决这个问题的方法,最常见的就是: 在wh ...
- Mybatis中实体类属性与数据库列表间映射方法介绍
这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考. Mybatis不像Hibernate中那么自动化,通过@Co ...
随机推荐
- 找了一个api管理工具
找了一个工具,https://github.com/nutsteam/apiManager选择了如下方式,进行了安装. ● 下载https://git.oschina.net/zhoujingjie/ ...
- Swift - 通过叠加UILabel来实现混合的进度条
Swift - 通过叠加UILabel来实现混合的进度条 效果 源码 https://github.com/YouXianMing/Swift-Animations // // MixedColorP ...
- jscript调用bat注意事项
开发的游戏项目,需要一个工具,对指定的资源进行复制.加密,然后打包.之前打包时都手工操作,复制与加密这二步分别写了几个工具(lua加密与图片资源加密是分开的),后来感觉bat操作路径特别麻烦,所以我改 ...
- 用代码打开通知中心(statusbar、通知栏、消息中心)
我想用代码来打开android的消息中心,也叫做statusbar.通知栏.通知栏其实就是一个常驻的服务,至于原理这里就不多说了,简单说下思路和问题. 思路:API中没有实现的方法,那么就利用反射机制 ...
- ImageView和onTouchListener实现,点击查看图片细节
这是来自疯狂android讲义上的例子,其实没啥意思.就是用监听器获取到手指的坐标,然后根据这个坐标开始绘制一个图片.(这里的绘制方式有些问题,所以凑合看看吧.) 首先,还是布局文件(两个ImageV ...
- 如何进行Logstash logstash-input-jdbc插件的离线安装
我们单位的服务器位于隔离区,不允许链接互联网,因此整理了在ELK集群上离线安装Logstash的jdbc input插件的方法,供大家参考. 总体思路是需要一台中转的机器,这台机器需要能够访问互联网, ...
- Asp.Net MVC2.0 Url 路由入门---实例篇 【转】
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- go语言之进阶篇主协程先退出导致子协程没来得及调用
1.主协程先退出导致子协程没来得及调用 示例: package main import ( "fmt" "time" ) //主协程退出了,其它子协程也要跟着退 ...
- jquery实现上传文件大小类型的验证
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 用css3和jQuery制作精美的表单
用css3和jQuery制作一个简单的精美表单 html代码如下: <span class="title">Mask Your Input Forms and Make ...