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

视频地址: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指定关联表类型

转载于:https://www.cnblogs.com/huaixiaoz/p/5799705.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ANSYS——查看某一截面的云图分布(也叫做切片图)

1.确定截面的位置 此处以图中红色处截面为例 2.将工作平面经过坐标变化移动到指定截面处(工作平面的XY平面与截面重合) 工作平面坐标系默认是与总体坐标系重合的,这里是先平移再进行旋转

深度学习之keras (一) 初探

之前一段时间里&#xff0c;学习过tensorflow和Pytorch也写了点心得&#xff0c;目前是因为项目原因用了一段时间Keras&#xff0c;觉得很不错啊&#xff0c;至少从入门来说对新手极度友好&#xff0c;由于keras是基于tensoflow的基础&#xff0c;相当于tensorflow的高级API吧&…

swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)...

swift&#xff1a;高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符&#xff0c;Swift还有许多复杂的高级运算符&#xff0c;包括了C语和Objective-C中的位运算符和移位运算。 不同于C语言中的数值计算&#xff0c;Swift的数值计算默…

收集、报告或保存系统活动信息:sar命令

2019独角兽企业重金招聘Python工程师标准>>> 索引 sar命令的使用常用方法 查看网络设备&#xff08;网卡&#xff09;的状态信息查看socket使用情况查看cpu使用情况(默认)查看内存和交换空间使用情况查看内存的统计信息查看tty设备的活动状态查看等待运行的进程数和…

【GOF23设计模式】原型模式

【GOF23设计模式】原型模式 来源&#xff1a;http://www.bjsxt.com/ 一、【GOF23设计模式】_原型模式、prototype、浅复制、深复制、Cloneable接口 浅复制 1 package com.test.prototype;2 3 import java.util.Date;4 5 /**6 * 浅复制7 */8 public class Sheep implements C…

Deepfacelab 小白教程

不小心入了AI换脸的坑&#xff0c;但是感觉AI换脸很有意思&#xff0c;第一次感觉科研使我快乐。 目录 一、AI换脸软件简介 二、Deepfacelab下载安装 三、Deepfacelab Demo实现 四、Deepfacelab 填坑 五、总结 一、AI换脸软件简介 这个没有具体使用过&#xff0c;目前我…

Underscore.js 的模板功能

Underscore是一个非常实用的JavaScript库&#xff0c;提供许多编程时需要的功能的支持&#xff0c;他在不扩展任何JavaScript的原生对象的情况下提供很多实用的功能。 无论你写一段小的js代码&#xff0c;还是写一个大型的HTML5应用&#xff0c;underscore都能帮上忙。目前&…

ANSYS——查看剖面图的应力分布云图以及工作平面的相关设置

剖面图和切片图其实差不多,只是切片图只有一个截面,而剖面图是切去一部分保留另一部分模型,不但可以看到截面处应力分布还可以看到剩余模型的应力分布 切片应力云图可见:https://blog.csdn.net/qq_45769063/article/details/106357700 1.剖面云图的查看 首先将工作平面的…

2016.8.2

高端内存映射方式 高端内存映射分为三种&#xff1a;永久映射、临时映射和非连续动态内存映射。高端内存一般是指896MB以上的页框&#xff0c;这段区间内核一般不能直接访问。 1.永久映射 永久内核映射允许内核建立高端页框到内核地址空间的长期映射。它们使用主内核页表中的一…

深度学习之pytorch(三) C++调用

玩深度学习&#xff0c;个人觉得基于anaconda的python适合开发与测试&#xff0c;C适合实际的工程部署&#xff01;而pytorch官方有编译好的libtorch&#xff0c;特别方便&#xff0c;适合于我这样的伸手党和手残党(win10下编译tensorflow编译了好久都没通过&#xff0c;好忧伤…

机器学习(一) 基于sklearn库的数据集划分(交叉验证)

机器学习中首要环节就是数据集的处理&#xff0c;其中数据集的处理从个人理解(如有错误敬请谅解)的角度来说包括两个方面&#xff1a;数据集划分和数据清理。其中数据集划分是指训练集、验证集和测试集的数据类别划分&#xff1b;数据清理是指数据的清洗、删除等等方面。这两天…

敏捷项目开源管理软件ScrumBasic(2)- 多项目支持

1.加入Project对象模型 public class Project{[Key][MaxLength(32)]public string ID { get; set; }public string Name { get; set; }public int Order { get; set; }public ICollection<UserStory> Stories { get; set; }public ApplicationUser Creator { get; set; }…

postgresql表和列注释(描述)

2019独角兽企业重金招聘Python工程师标准>>> PostgreSQL添加表和列注释。本文为测试表test&#xff0c;默认无注释。 test# \d关联列表架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述 -------------------------------------------------public | test | …

Fifth scrum meeting - 2015/10/30

概述 从昨天开始&#xff0c;我们的开发工作终于进入了正轨&#xff0c;由于之前没有mooc服务器API接口&#xff0c;一些工作无法进行。 因为我们团队开始开发较晚&#xff0c;因此我们将开发阶段的截至时间定为了下周五&#xff0c;测试阶段则压缩为下周周六和周日两天。 我们…

计算机加入域 不能访问网络位置 解决办法

计算机加入域 不能访问网络位置 解决办法 启动以下服务 本文转自 onesthan 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/91xueit/1660286&#xff0c;如需转载请自行联系原作者

Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下&#xff1a; 景物(SCENE)通过镜头&#xff08;LENS&#xff09;生成的光学图像投射到图像传感器(Sensor)表面上&#xff0c;然后转为电信号&#xff0c;经过A/D&#xff08;模数转换&#xff09;转换…

win10 下pycharm+anaconda 编译生成pyd文件

由于生产部署的问题&#xff0c;需要把用python写的深度学习代码编译为可被调用的文件。上网搜索了下&#xff0c;暂时了解到win10下pyd文件比较流行。下面是直接引用某位博主的结论&#xff0c;个人感觉总结的很好。其中Cython库将已有的Python代码转化为C语言的代码&#xff…

JVM(4)之 使用MAT排查堆溢出

为什么80%的码农都做不了架构师&#xff1f;>>> 接下来讲解如何设置以及当发生堆溢出的时候怎么排查问题。先看一小段代码&#xff1a;   代码中使用了一个无限循环来为list添加对象&#xff0c;如果采用默认的堆大小的话可能要等待好久才能出现堆溢出的错误&a…

caffe 中的一些参数介绍

转自&#xff1a;http://blog.csdn.net/cyh_24/article/details/51537709 solver.prototxt net: "models/bvlc_alexnet/train_val.prototxt" test_iter: 1000 # test_interval: 1000 # base_lr: 0.01 # 开始的学习率 lr_policy: "step" # 学习率的…

python 制作二进制文件数据集(bin)

为了方便进行深度学习的程序调用与实现&#xff0c;需要将excel的数据文件转换为二进制文件。好处就是接口统一&#xff0c;读写速度快&#xff0c;节约空间。 一、调用库 使用xlrd读入execel表格&#xff0c;经过处理后转换为对应的dataframe结构&#xff0c;再使用pickle库…