阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 2381|回复: 0

mybatis关联查询,一对一,一对多

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126084
QQ
发表于 2017-5-7 12:48:51 | 显示全部楼层 |阅读模式
注:这篇文章的代码有部分删减,不能直接使用,不过关键代码都存在
应用场景:
   想用mybatis做关联查询,并且把查询出的数据自动组装成对象可以使用关联查询。
1、一对一实现  
例如:一部小说,属于一个分类,查询小说的时候想同时查询出所属分类。
1)实体定义:
  1. public class Book {
  2.     private static final long serialVersionUID = 1L;
  3.    
  4.     /**
  5.      *小说ID
  6.      */
  7.     private Integer bookId;
  8.     /**
  9.      *作者
  10.      */
  11.     private String author;
  12.     /**
  13.      *小说名称
  14.      */
  15.     private String bookName;
  16.     /**
  17.     /**
  18.      *分类ID
  19.      */
  20.     private Integer catalogId;
  21.    
  22.     private CrawlCatalog catalog;
  23. }
复制代码
  1. public class Catalog  {
  2.     private static final long serialVersionUID = 1L;
  3.    
  4.     /**
  5.      *分类ID
  6.      */
  7.     private Integer catalogId;
  8.     /**
  9.      *分类名字
  10.      */
  11.     private String name;
  12. }
复制代码
2) BookMapper实现
  1. <!--通用表字段列表-->
  2.     <resultMap id="ResultMapWithCata" type="Book">
  3.         <result column="BOOK_ID" property="bookId" jdbcType="INTEGER"/>
  4.         <result column="AUTHOR" property="author" jdbcType="VARCHAR"/>
  5.         <result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR"/>
  6.         <result column="CATALOG_ID" property="catalogId" jdbcType="INTEGER"/>
  7.         <association property="catalog" javaType="Catalog">
  8.             <id column="CATALOG_ID" property="catalogId" />
  9.             <result column="CATALOGNAME" property="name" />
  10.         </association>
  11.     </resultMap>
  12.     <!--通用表字段列表-->
复制代码
  1. <!--
  2.     方法名称: selectListByIds
  3.     调用路径: BookEntityMapper.selectListByIds
  4.     开发信息:
  5.     处理信息: 根据ID查询记录
  6.     -->
  7.     <select id="selectListByIds" parameterType="java.util.List" resultMap="ResultMapWithCata">
  8.        SELECT   
  9.                <include refid="columnListAlias"/>, c.NAME AS CATALOGNAME
  10.        FROM   BOOK b, CATALOG c
  11.        WHERE b.CATALOG_ID=c.CATALOG_ID AND (
  12.         <foreach collection="list" item="item" index="index" separator=" OR " >  
  13.             BOOK_ID=#{item}
  14.            </foreach>
  15.            )
  16.     </select>
复制代码
2、多对一实现
例如:一个用户在商城生成了一个订单,订单中包含很多商品,想在查询订单的同时把订单的明细查询出来
1)实体定义
  1. public class Order {
  2.     /** 主键订单Id */
  3.     private Integer id;
  4.     /** 下单用户id */
  5.     private Integer userid;
  6.     // 订单明细
  7.     private List<OrderDetail> orderdetails;
  8. }
复制代码
  1. public class OrderDetail {
  2.     /** 主鍵,訂單明细表Id */
  3.     private Integer id;
  4.     /** 訂單Id */
  5.     private Integer orderId;
  6.     /** 商品id */
  7.     private Integer itemsId;
  8.     /** 商品购买数量 */
  9.     private Integer itemsNum;
  10.     // 明细对应的商品信息
  11.     private Items items;
  12. }
复制代码
2)OrderMapper实现
  1. <!-- 查询订单关联查询用户及订单明细 -->
  2. <select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap">
  3.     SELECT
  4.       t1.*,
  5.       t3.id orderdetail_id,
  6.       t3.item_id,
  7.       t3.item_num,
  8.       t3.order_id
  9.     FROM
  10.       order t1,
  11.       orderdetail t3
  12.     WHERE t3.orders_id=t1.id
  13. </select>
复制代码
  1. <!-- 查询订单(关联用户)及订单明细的resultMap -->
  2. <resultMap type="Orders" id="ordersAndOrderDetailResultMap">
  3.   <id column="id" property="id"/>
  4.   <result column="user_id" property="userId"/>
  5.   <collection property="orderdetails" ofType="OrderDetail">
  6.     <id column="orderdetail_id" property="id"/>
  7.     <result column="item_id" property="itemId"/>
  8.     <result column="item_num" property="itemNum"/>
  9.     <result column="order_id" property="orderId"/>
  10.   </collection>
  11. </resultMap>
复制代码




捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-3-29 20:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表