视频地址:http://edu.51cto.com/sd/be679

在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现。不过这里不说,做关联查询的步骤可以简单的总结为以下的几步:

    1.分析出表和表之间的关联关系

    2.Sql语句的写法

    3.在实体类中把附表的信息添加到主查询表中

    4.配置resulMap

      配置你主要查询表的信息

      配置你关联表的信息

这里我先给出几个表的字段和关系,以三张表为例(用户表:users,订单表:orders,订单详情表:orderDetail)大概字段如下:

  Users

    Userid

    Uname

    Upassword

    Usex

  Orders

    Orderid

    Userid(外键指向用户表)

    Order_unmber

    createTime

    address

  Orderdetail

    Orderdetailid

    Orderid (外键指向订单表)

    Num

  这三张表的关系简单的可以说成如下关系:

    用户表-->订单表   是一对一的关系

    订单表-->订单详情表  是一对多的关系

  一.这里先来看一下Mybatis中对于一对一关系的实现(以用户表和订单表举例):

  这里的一个需求是:查询订单表的所有信息和用户名

    1.SQL语句:  

      SELECT t_orders.* ,t_user.uname as 用户名

      FROM t_orders,t_user

      where t_orders.userid=t_user.userid

    结果

    2.主要查询的订单信息(主要查询表),所有在订单中添加User的对象

private Users user;//在订单表中关联用户表的属性,get,set别忘记

    3.配置一个resultMap

<resultMap type="com.etc.entity.Orders" id="ordersResultMap">

  <!-- 配置你主要查询表的信息 -->

  <id column="orderid" property="orderid"/>

  <result column="userid" property="userid"/>

  <result column="order_number" property="order_number"/>

  <result column="createtime" property="createTime"/>

  <result column="address" property="address"/>

<!-- 配置关联表的信息 -->

<!--

association:配置一对一关联表的信息

property:主表中匹配关联表的那个属性

javaType:该属性的全路径(包+类名)

-->

  <association property="user" javaType="com.etc.entity.User">

    <id column="userid" property="userid"/>

    <result column="uname" property="uname"/>//如果还有查询别的信息只要配置column即可

  </association>

</resultMap>

  调用:

<select id="findByOrderUser" resultMap="ordersResultMap">
SELECT t_orders.* ,t_user.uname as 用户名
FROM t_orders,t_user
where t_orders.userid=t_user.userid
</select>

  二.多对多关联表的实现(多对多的实现原理和一对一的类型,所以不多做解释,直接贴代码

    1.Sql语句:(查询的订单表的全部信息和订单详情表的ID和数量)

      SELECT t_orders.*,t_orderdetail.orderdetailid,t_orderdetail.num

     FROM t_orders,t_orderdetail

    WHERE t_orderdetail.orderid=t_orders.orderid

    结果:(从这个结果可以看出来,一个订单可以对应对个订单详细的记录)

    分析:这里的主要查询对象还是订单表,所以要在订单表中加入订单详情的对象

    2.主要查询的订单信息(主要查询表),所有在订单中添加OrderDetail的对象(并且要放在集合中)

private List<OrderDetail> orderDetail;//get  set  别忘记

     3.配置一个resultMap(一对多使用collection)

<resultMap type="com.etc.entity.Orders" id="orderResultMap">

  <!-- 配置 要映射的订单信息-->

  <id column="orderid" property="orderid"/>

  <result column="userid" property="userid"/>

  <result column="order_number" property="order_number"/>

  <result column="createtime" property="createTime"/>

  <result column="address" property="address"/>

  <!-- 关联表的映射信息 -->

<!--

collection:对应查询出来的结果有多条的映射记录

property:对应的主表中添加的关联表的那个属性

ofType:就相当于是一对一中的javaType

-->

  <collection property="orderDetail" ofType="com.etc.entity.OrderDetail">

    <id column="orderdetailid" property="orderdetailid"/>

    <result column="num"  property="num"/>

  </collection>

</resultMap>

  总结:

    一对一和一对多的配置原理都很类型,主要就是通过配置resultMap

    一对一关联表配置assocation,用javaType指定关联表类型

    一对多关联表配置collection,ofType指定关联表类型

7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)的更多相关文章

  1. (三)Mybatis类型转换器,接口传参类型,一对一,一对多查询resultMap配置

    Mybatis类型转换器 首先明白什么时候用到它,当数据库的字段类型和java字段类型无法默认匹配时候进行转换,比如现在数据库类型是INTEGER,而java当中类型是Boolean,true表示1, ...

  2. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  3. .NetCore中EFCore的使用整理(二)-关联表查询

    EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core  1.1 1.当前的版本,还不支持延迟加载(Lazy ...

  4. Mybatis一对一、一对多、多对多查询。+MYSQL

    场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...

  5. .NetCore中EFCore的使用整理(三)-关联表操作

    一.查询关联表数据 StudyAboard_TestContext _context = new StudyAboard_TestContext(); CrmRole role = _context. ...

  6. DJANGO2.0 关联表的必填 ON_DELETE

    DJANGO2.0 关联表的必填 ON_DELETE 参数的含义 - BUXIANGHEJIU 的博客 - CSDN 博客 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  7. MyBatis实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  8. MyBatis学习总结(五)——实现关联表查询(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...

  9. MyBatis入门学习教程-实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

随机推荐

  1. SAP HR宏 rp-provide-from-last

    运行se11 Database table: 输入 TRMAC 点击display 查看其内容:第14个按钮(ctrl + shift +F10) 再Name 输入:rp-provide-from-l ...

  2. linux平台编译安装Poco C++

    1.到官网下载poco-1.4.6p4-all.tar.gz,地址为http://pocoproject.org/download/index.html 2.同时下载说明文档 3.根据说明文档执行安装 ...

  3. Codeforces Round #165 (Div. 2)

    C. Magical Boxes 问题相当于求\[2^p \gt \max{a_i \cdot 2^{k_i}},p \gt k_i\] D. Greenhouse Effect \(dp(i,j)\ ...

  4. pt-ioprofile分析查看mysql的真实IO情况

    针对IO密集型应用做系统调优的时候,我们通常都需要知道系统cpu  内存  io 网络等系统性能 和 使用率,结合应用本身的访问量,以及 mysql的性能指标来综合分析.比如说:我们将系统压力情况分为 ...

  5. C#可扩展编程之MEF学习

    MEF系列文章: C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import) C#可扩展编程之MEF学习 ...

  6. MFC resizer封装

    用法: #include "resizer.h" 在mfc对话框头文件里面添加成员: CResizer m_Resizer; mydialog.cpp里面: OnInitDialo ...

  7. pt-kill使用

    percona-toolkit-2.2.10使用举例 以pt-kill为例 --help,可以看到帮助信息 -------- 运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQ ...

  8. excel表格中关于 撤销工作表保护密码

    利用宏处理,代码如下: Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m A ...

  9. ES(一): 架构及原理

    Elasticsearch 是一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建,可以用于全文搜索,结构化搜索以及近实时分析.可以说Lucene是当今最先进,最高效的全功 ...

  10. python--ulipad控制台中文输出乱码

    ulipad用起来顺手,而不尽人意的地方时,它不能正确输出中文.而且有人指出这和文件的编码没关系,所以将”设置“选项里”缺省文档编码“修改为”utf-8“也无济于事.为了解决这个问题,我在网上搜了搜, ...