mybatis高级映射

1.关于高级映射

			实现处理订单一对一,与一对多的关系的实现
		





.User表            as  u
.items商品表    	   as  i
.orders订单表   	   as  o
.orderitems	       as  oi						(订单明细表)
userorders
全俊1488488
逸儿41884188
渣男43994399
  1. 一对一的关系    列: 一个订单  →(只能是一个用户的吧)→ 对应用户  (这里就是一个一对一的关系)
    列如 1488488这个订单 是不是只能对应 全俊,逸儿,渣男,其中之一的一个用户.
    
  2. 一对多          列: 一个用户 →(可以拥有多个订单)→ 对应订单 (这里就是一个一对多的关系)
    这里指名一下 全俊这个用户是不是可以拥有这个三个订单 ,而每一个订单是不是只对应着一个用户
    

3.多对多 :如下图

全俊 商品 逸儿 拖鞋 手表 金项链 草莓 葡萄 火龙果 全俊 商品 逸儿

itemsorderitems
棉衣2019-11-11
拖鞋2019-12-12
水杯2019-12-13
  1. 一对一与一对多:不是绝对的 相对于某种情况而定 ,实现哪一种 根据开发需求;因为有时候实现一对一的话可能就不满足需求了,而有些时候 一对多又太过多余.

  2. o表可以包括多个oi表   : 一个订单是不是可以有多件商品  多个商品是不是就是多个明细,那么是就是个
    一对多的关系..... 显然一个订单明细 是不是只能在一个订单中,对应着一对一的关系
    
  3. u表对应着io表的关系可以理解成一个多对多的关系,

  4. 一个老师在上课 一群学生在听课 ,是不是一种一对多的关系,那么一个学生在讲课 一群老师在听课 这里也是个一对多的关系,那么 一群老师在讲课 一群学生在听课 是不是交叉成了一个,多对多的关系呢

老师 授课 学生 讲课 听课 讲课 听课 老师 授课 学生

2.如何关联映射

			resultMap设置
			
		resultMap 这是结果映射的 ID,可以映射关联的嵌套结果到一个合适的对象图中。这是一种替代方法来调用另外一个查询
		语句。这允许你联合多个表来合成到 resultMap 一个单独的结果集。这样的结果集可能包含重复,数据的重复组需要被分
		解,合理映射到一个嵌套的对象图。为了使它变得容易,MyBatis 让你“链接”结果映射,来处理嵌套结果。一个例子会很容易
		来仿照,这个表格后面也有一个示例。  

resultType
1.实现一对一

    指定 resultType 返回值类型时 String 类型的,
    string 在这里是一个别名,代表的是 java.lang.String 

    对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 'hashmap'
    基本数据类型考虑到重复的问题,会在其前面加上 '_',比如 byte 对应的别名是 '_byte'
-->
<select id="getEmpNameById" resultType="string">
    select username from t_employee where id = #{id}
</select>

resultMap
1.实现一对多的映射

<select id="ordersanduserselectAll" resultMap="orders_and_user" >

            <!--双表内连接查询-->

            select  o.* u.* from orders o inner join  user u  on o.Id=u.id where o.id=#{id}

    </select>

    <resultMap id="orders_and_user" type="com.yi.pojo.orders">
        <!--
       描述该属性类型的用javaType
       描述该元素类型的用ofType 列集合
       -->
                <id property="Id" column="Id"></id>
                <result property="Name" column="Name"></result>
            <collection property="orderanduser" ofType="com.yi.pojo.orders">
                <id property="id" column="id"></id>
                <result property="name" column="name"></result>
            </collection>

    </resultMap>
 			

resultType和resultMap实现一对一查询小结
实现一对一查询:

  1. resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射
    如果没有查询结果的特殊要求建议使用resultType

2.resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中

3.resultMap可以实现延迟加载,resultType无法实现延迟加载

4.延迟加载下次讲

3.为什么使用高级映射

Created with Raphaël 2.2.0 用户 是否购买 确认? 失败 或者 成功 yes no
  • 在购买商品成功后,是不是会产生很多表呢 ?
  • 有些时候需要查询多张表时,就需要关联查询了.
  • 在面向人群时,简单的映射 已经满足不了 大众了.
链接
用户A
订单
订单明细
商品
天猫表收款表
快递派送表
链接
用户B
订单
订单明细
商品
天猫表收款表
快递派送表
	1. A B 两个用户 在网上购物 ,面向用户时 是不是会产生个多样化的选择
	2.使用高级映射优化程序
  • 我还会写一个写一个 整体流程
  • 这里概念为多
  • 主要需要就是 在什么情况下,去使用什么流程 . (主看需求)
  • 延迟加载如何实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值