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

应用场景:

想用mybatis做关联查询,并且把查询出的数据自动组装成对象可以使用关联查询。

1、一对一实现

例如:一部小说,属于一个分类,查询小说的时候想同时查询出所属分类。

1)实体定义:

public class Book {
private static final long serialVersionUID = 1L; /**
*小说ID
*/
private Integer bookId;
/**
*作者
*/
private String author;
/**
*小说名称
*/
private String bookName;
/**
/**
*分类ID
*/
private Integer catalogId; private CrawlCatalog catalog;
}
public class Catalog  {
private static final long serialVersionUID = 1L; /**
*分类ID
*/
private Integer catalogId;
/**
*分类名字
*/
private String name;
}

2) BookMapper实现

    <!--通用表字段列表-->
<resultMap id="ResultMapWithCata" type="Book">
<result column="BOOK_ID" property="bookId" jdbcType="INTEGER"/>
<result column="AUTHOR" property="author" jdbcType="VARCHAR"/>
<result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR"/>
<result column="CATALOG_ID" property="catalogId" jdbcType="INTEGER"/>
<association property="catalog" javaType="Catalog">
<id column="CATALOG_ID" property="catalogId" />
<result column="CATALOGNAME" property="name" />
</association>
</resultMap>
<!--通用表字段列表-->
  <!--
方法名称: selectListByIds
调用路径: BookEntityMapper.selectListByIds
开发信息:
处理信息: 根据ID查询记录
-->
<select id="selectListByIds" parameterType="java.util.List" resultMap="ResultMapWithCata">
SELECT
<include refid="columnListAlias"/>, c.NAME AS CATALOGNAME
FROM BOOK b, CATALOG c
WHERE b.CATALOG_ID=c.CATALOG_ID AND (
<foreach collection="list" item="item" index="index" separator=" OR " >
BOOK_ID=#{item}
</foreach>
)
</select>

2、多对一实现

例如:一个用户在商城生成了一个订单,订单中包含很多商品,想在查询订单的同时把订单的明细查询出来

1)实体定义

public class Order {
/** 主键订单Id */
private Integer id;
/** 下单用户id */
private Integer userid;
// 订单明细
private List<OrderDetail> orderdetails;
}
public class OrderDetail {
/** 主鍵,訂單明细表Id */
private Integer id;
/** 訂單Id */
private Integer orderId;
/** 商品id */
private Integer itemsId;
/** 商品购买数量 */
private Integer itemsNum;
// 明细对应的商品信息
private Items items;
}

2)OrderMapper实现

<!-- 查询订单关联查询用户及订单明细 -->
<select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap">
SELECT
t1.*,
t3.id orderdetail_id,
t3.item_id,
t3.item_num,
t3.order_id
FROM
order t1,
orderdetail t3
WHERE t3.orders_id=t1.id
</select>
<!-- 查询订单(关联用户)及订单明细的resultMap -->
<resultMap type="Orders" id="ordersAndOrderDetailResultMap">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<collection property="orderdetails" ofType="OrderDetail">
<id column="orderdetail_id" property="id"/>
<result column="item_id" property="itemId"/>
<result column="item_num" property="itemNum"/>
<result column="order_id" property="orderId"/>
</collection>
</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. 超级链接a中javascript:void(0)弹出另外一个框问题

    转字:http://my.oschina.net/castusz/blog/68186 结果在IE.Firefox.Chrome都是先执行的onclick事件,在项目中我们尽量不要同时使用这两种方式. ...

  2. hadoop map-red的执行过程

    hadoop的 map-red就是一个并行计算平台,我们在使用这个平台的时候,要做的事情就是提交自己定制的任务(job,主要定制map类,reduce类,combine类等类),然后设置job的各种参 ...

  3. PyCharm5.0.2最新版破解注册激活码(图文版)

    下载PyCharm http://download-cf.jetbrains.com/python/pycharm-professional-5.0.2.exe 安装PyCharm 设置激活服务器   ...

  4. ecshop 常见问题汇总

    下面68ECSHOP开发中心就和大家说说ecshop使用中常见的问题 1.如何修改网站"欢迎光临本店"       回答(1) languages\zh_cn\common.php ...

  5. vi 编辑器命令 (share)

    转自:http://man.ddvip.com/soft/vieditor/vi.html 一.Unix编辑器概述 编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Uni ...

  6. 在线聊天室的实现(1)--websocket协议和javascript版的api

    前言: 大家刚学socket编程的时候, 往往以聊天室作为学习DEMO, 实现简单且上手容易. 该Demo被不同语言实现和演绎, 网上相关资料亦不胜枚举. 以至于很多技术书籍在讲解网络相关的编程时, ...

  7. 获得图片颜色---摘自php手册

    Example #1 imagecolorsforindex() 例子 ;$color_index = imagecolorat($im, $start_x, $start_y); // 使其可读$c ...

  8. 重放攻击(Replay Attacks)

    重放攻击(Replay Attacks)1.什么是重放攻击顾名思义,重复的会话请求就是重放攻击.可能是因为用户重复发起请求,也可能是因为请求被攻击者获取,然后重新发给服务器. 2.重放攻击的危害请求被 ...

  9. 公钥与私钥,HTTPS详解

    1.公钥与私钥原理1)鲍勃有两把钥匙,一把是公钥,另一把是私钥2)鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把.3)苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可以达到 ...

  10. mysql-创建库之问题

    一.在登入mysql命令行,创建数据库时报错 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'xiaolu ...