mybatis入门截图四(订单商品数据模型 一对一,一对多,多对多)
---------------------------------
一对一查询
查询订单信息,关联查询创建订单的用户信息
1.高级映射-一对一查询-使用resultType
2.高级映射-一对一查询-使用resultMap
在mapper.xml中定义映射的ResultMap
<!-- 订单查询关联用户的resultMap
将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
-->
<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
<!-- 配置映射的订单信息 -->
<!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
column:订单信息的唯 一标识 列
property:订单信息的唯 一标识 列所映射到Orders中哪个属性
-->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property=note/> <!-- 配置映射的关联的用户信息 -->
<!-- association:用于映射关联查询单个对象的信息
property:要将关联查询的用户信息映射到Orders中哪个属性 javaType:表示该属性对应的实体类型
-->
<association property="user" javaType="cn.itcast.mybatis.po.User">
<!-- id:关联查询用户的唯 一标识
column:指定唯 一标识用户信息的列 指查询出来的列
property:映射到user的哪个属性
-->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/> </association>
</resultMap>
resultType和resultMap实现一对一查询小结
resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
如果没有查询结果的特殊要求建议使用resultType。
resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。
resultMap可以实现延迟加载,resultType无法实现延迟加载。
--------------------------------------------------
一对多查询
在上面的一对一基础上,添加订单明细的关联查询
确定主查询表:订单表
确定关联查询表:订单明细表
确定关联查询表:用户表
实体类:
sql语句以及对应的查询结果:
mapper.xml中配置resultMap
<!--
查询订单信息 关联查询用户以及订单明细信息 因为订单和用户的ResultMap已经在上面定义所以这里使用extends之后
只需要配置订单明细的映射关系即可
-->
<resultMap type="org.mybatis.po.Orders" id="OrdersAndUserAndOrderDetailResultMap" extends="OrdersUserResultMap">
<!-- 订单信息 -->
<!-- 用户信息 -->
<!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 --> <!-- 订单明细信息
一个订单关联查询出了多条明细,要使用collection进行映射
collection:对关联查询到多条记录映射到集合对象中
property:将关联查询到多条记录映射到org.mybatis.po.Orders哪个属性
ofType:指定映射到list集合属性中pojo的类型
-->
<collection property="orderdetailList" ofType="org.mybatis.po.Orderdetail">
<!-- id:订单明细唯 一标识
property:要将订单明细的唯 一标识 映射到org.mybatis.po.Orderdetail的哪个属性
-->
<id column="orderdetailid" property="id"/>
<result column="orders_id" property="ordersId"/>
<result column="items_id" property="itemsId"/>
<result column="items_num" property="itemsNum"/>
</collection>
</resultMap>
statement对象:
<!-- 查询订单信息 关联查询用户以及订单明细信息 mysql中注释:#-->
<select id="findOrdersAndUserAndOrderDetailResultMap" resultMap="OrdersAndUserAndOrderDetailResultMap">
select orders.*,#订单信息
user.username,user.sex,user.address,#用户数据
orderdetail.id as
orderdetailid,orderdetail.orders_id,orderdetail.items_id,orderdetail.items_num#订单明细数据
from orders,user,orderdetail
where orders.user_id=user.id and
orders.id=orderdetail.orders_id
</select>
mapper接口
测试类:
断点调试:
----
------------------------------------------------
多对多查询
sql语句:查询出来的只有一个用户 对应2个订单 每个订单对应2个明细 每一明细对应一件商品
实体类:
表关系:
statement对象:
<!-- 查询用户及其购买的商品信息 -->
<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
select
orders.*,#订单信息
user.username,user.sex,user.address,#用户数据
orderdetail.id
as
orderdetailid,orderdetail.orders_id,orderdetail.items_id,orderdetail.items_num,#订单明细数据
items.name,items.price,items.detail#商品数据
from
orders,user,orderdetail,items
where orders.user_id=user.id and
orders.id=orderdetail.orders_id and orderdetail.items_id=items.id
</select>
resultmap定义:
<!-- 查询用户及购买的商品 type写的是user类的全路径 把数据映射到user中 -->
<resultMap type="org.mybatis.po.User" id="UserAndItemsResultMap">
<!-- 用户信息 -->
<id column="user_id" property="id" />
<result column="username" property="username" />
<result column="sex" property="sex" />
<result column="address" property="address" /> <!-- 订单信息一个用户对应多个订单,使用collection映射-->
<collection property="ordersList" ofType="org.mybatis.po.Orders">
<id column="id" property="id" />
<result column="user_id" property="userId" />
<result column="number" property="number" />
<result column="createtime" property="createtime" />
<result column="note" property="note" /> <!-- 订单明细一个订单包括 多个明细 -->
<collection property="orderdetailList" ofType="org.mybatis.po.Orderdetail">
<id column="orderdetailid" property="id" />
<result column="orders_id" property="ordersId" />
<result column="items_id" property="itemsId" />
<result column="items_num" property="itemsNum" /> <!-- 商品信息一个订单明细对应一个商品-->
<association property="items" javaType="org.mybatis.po.Items">
<id column="items_id" property="id"></id>
<result column="name" property="name" />
<result column="price" property="price" />
<result column="detail" property="detail" />
</association> </collection> </collection> </resultMap>
测试类:
断点调试:
查询出来的只有一个用户
对应2个订单
每个订单对应2个明细
每一明细对应一件商品
---------------------------------------------------------------
mybatis入门截图四(订单商品数据模型 一对一,一对多,多对多)的更多相关文章
- 21Mybatis_订单商品数据模型_一对多查询——resultMap方式
这篇文章延续订单商品数据模型,这张讲述的是一对多的查询.(用resultMap) 给出几张表的内容: User表:
- mybatis入门截图四(订单商品数据模型-懒加载-缓存)
<!-- 延迟加载的resultMap --> <resultMap type="cn.itcast.mybatis.po.Orders" id="Or ...
- mybatis由浅入深day02_课程复习_1订单商品数据模型分析
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...
- 19Mybatis_订单商品数据模型分析
这篇文章是对订单商品数据模型进行分析(会给出分析思路),有四张表.这篇文章是后续文章的基础,因为后续的文章要针对这个数据模型(四张表)进行一对一,一对多,多对多进行查询. 我们以后会碰到各种各样的数据 ...
- mybatis 一对一 一对多 多对多
一对一 一对多 多对多
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- 【转载】 mybatis入门系列四之动态SQL
mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...
- mybatis入门(四)
mybatis入门 需求:根据id查询用户的信息 mysql数据库: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `us ...
随机推荐
- C++管理指针成员
1.C++中一般採用以下三种方法之中的一个管理指针成员: (1)指针成员採取常规行为. 这种类具有指针的全部缺陷:具有指针成员且使用默认复制构造函数和赋值操作符,无法避免悬垂指针(两个对象的指针成员指 ...
- cocos2d-android学习四 ---- 精灵的创建
上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...
- Android软键盘状态的切换及其强制隐藏
MainActivity例如以下: package cc.c; import android.os.Bundle; import android.view.View; import android.v ...
- Selenium API 介绍
Selenium API 介绍 我们先前学习过元素定位,大家不知道学习得怎么样了,当你学会元素定位之后就能够跟着我的脚步学习本节Selenium 经常使用的API 介绍 Seleium 为什么能模拟人 ...
- 一步一步跟我学习lucene(18)---lucene索引时join和查询时join使用演示样例
了解sql的朋友都知道,我们在查询的时候能够採用join查询,即对有一定关联关系的对象进行联合查询来对多维的数据进行整理.这个联合查询的方式挺方便的.跟我们现实生活中的托人找关系类似,我们想要完毕一件 ...
- Android开机动画、logo、字样的定制过程【转】
本文转载自:http://blog.csdn.net/yinhaide/article/details/43668401 Android开机画面总共有三屏 一.第一屏:开机logo 1.选张png格式 ...
- [JXOI 2018] 游戏 解题报告 (组合数+埃氏筛)
interlinkage: https://www.luogu.org/problemnew/show/P4562 description: solution: 注意到$l=1$的时候,$t(p)$就 ...
- numpy快速指南
Quickstart tutorial 引用https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Prerequisites Before ...
- getElementsByName使用
查了下手册,getElementsByName()不能提取没有name属性的标签.div标签本身没有name属性,所以不能被提取.有name标签的主要是各种input标签,所以默认情况下getElem ...
- kindeditor文本编辑器乱码中乱码问题解决办法
这个问题我已经解决掉了,不是更改内容的编码格式,只要将lang/zh_CN.js 这个文件的编码转换成unicode即可 操作方法是 用记事本打开这个文件,另存为,然后更改文件的编码格式为unico ...