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指定关联表类型
7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)的更多相关文章
- (三)Mybatis类型转换器,接口传参类型,一对一,一对多查询resultMap配置
Mybatis类型转换器 首先明白什么时候用到它,当数据库的字段类型和java字段类型无法默认匹配时候进行转换,比如现在数据库类型是INTEGER,而java当中类型是Boolean,true表示1, ...
- 三、mybatis多表关联查询和分布查询
前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- Mybatis一对一、一对多、多对多查询。+MYSQL
场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...
- .NetCore中EFCore的使用整理(三)-关联表操作
一.查询关联表数据 StudyAboard_TestContext _context = new StudyAboard_TestContext(); CrmRole role = _context. ...
- DJANGO2.0 关联表的必填 ON_DELETE
DJANGO2.0 关联表的必填 ON_DELETE 参数的含义 - BUXIANGHEJIU 的博客 - CSDN 博客 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- MyBatis实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习总结(五)——实现关联表查询(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...
- MyBatis入门学习教程-实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
随机推荐
- hiho一下120周 后缀数组一·重复旋律
后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列. 小Hi ...
- LINK : fatal error LNK1117: syntax error in option 'VERSION:1.6.5'
今天在用vs2015编译ogre 1.6.5的代码时发生连接错误 LINK : fatal error LNK1117: syntax error in option 'VERSION:1.6.5'. ...
- GridView 控件中如何绑定 CheckBoxList
需求:设计这样一个页面,在页面上可以选择和展示各省份对应的文明城市? 思路:一次性查询出所需的记录(查询数据库的操作不宜写到 C# 代码的循环语句中),并保存到全局变量中,之后根据条件过滤出需要的.可 ...
- JSBinding+SharpKit / JavaScript调试
注意: 1 Firefox 的版本用41 2 我发现调试很难用的,现在我都用打印 步骤参考图:
- mysql操作汇集
1.修改root密码 cmd进如mysql的bin目录 >mysql -u root -p Enter password: ****** mysql> use mysql; mysql&g ...
- Oracle 学习之路开始
今年刚毕业,从毕业到现在工作正式工作四个多月了(实习的几个月就不算了).工作之中遇到的困难不少,学到的东西也不少:但是感觉学到的东西还是不够,毕竟java水很深啊. 现在工作中并不是每天都能学到新的东 ...
- div的显示和隐藏
本文从学习角度出发,仅当做笔记.高手可以忽略本文. 借助div的display属性可以实现div的显示或隐藏,而且在隐藏后不占用原来显示的空间. js控制显示和隐藏的代码: <script ty ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- CoreException: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could not be resolved
CoreException: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-compiler-plugin ...
- Spring Boot构建RESTful API与单元测试
如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下相关的内容. @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spr ...