注:这篇文章的代码有部分删减,不能直接使用,不过关键代码都存在 

应用场景:

想用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>

mybatis关联查询,一对一,一对多的更多相关文章

  1. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  2. mybatis 关联查询实现一对多

    场景:最近接到一个项目是查询管理人集合  同时每一个管理人还存在多个出资人   要查询一个管理人列表  每个管理人又包含了出资人列表 采用mybatis关联查询实现返回数据. 实现方式: 1 .在实体 ...

  3. MyBatis基础:MyBatis关联查询(4)

    1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...

  4. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  5. mybatis关联查询基础----高级映射

    本文链接地址:mybatis关联查询基础----高级映射(一对一,一对多,多对多) 前言: 今日在工作中遇到了一个一对多分页查询的问题,主表一条记录对应关联表四条记录,关联分页查询后每页只显示三条记录 ...

  6. Mybatis关联查询之一

    MyBatis的关联查询之一对多,多对一 在关系型数据库中,我们经常要处理一对多,多对一和多对多的关系. 一对多,多对一 一.entity 实体类 public class SmbmsRole { p ...

  7. Mybatis关联查询和数据库不一致问题分析与解决

    Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...

  8. Mybatis关联查询之二

    Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...

  9. MyBatis关联查询和懒加载错误

    MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...

随机推荐

  1. qt搭建环境

    1 用viewteam实现远程控制电脑.可以在家里继续操作办公电脑了. http://blog.csdn.net/sch0120/article/details/38324599 2qt环境安装.今天 ...

  2. css实现微信信息背景qq聊天气泡

    用css实现一个椭圆形状的背景框很好实现 css: div{ width:200px; height:80px; background-color: #78DDF8; border-radius:10 ...

  3. HDU 3353

    http://acm.hdu.edu.cn/showproblem.php?pid=3353 题目其实就是要把A B分解质因数,X是它们质因数的并集,D是质因数指数的和(如果有相同的质因数,把它们的指 ...

  4. iOS开发ARC内存管理

    本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...

  5. leetcode51. N-Queens

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  6. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  7. java中的transient关键词

    以下内容全部参考自:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html,有些直接复制了. 1. transient的作用 实体类实现了Seriliz ...

  8. springMVC 拦截器简单配置

    在spring 3.0甚础上,起来越多的用到了注解,从前的拦截器在配置文件中需要这样配置 <beans...> ... <bean id="measurementInter ...

  9. kernel/module.c

    #include <linux/errno.h>#include <linux/kernel.h>#include <asm/segment.h>#include ...

  10. Unity3D基础知识梳理

    这段时间在做Unity的项目,这差不多是我的第一次实战啊~然后公司来了实习的童鞋要学Unity,但是我一向不靠谱啊,所以只能帮他们稍微梳理下基础的东西了啊,唉~学长只能帮你们到这里了~顺便就把自己这两 ...