【框架】119:mybatis框架最后一天

​今天是刘小爱自学Java的第119天。

感谢你的观看,谢谢你。

image

学习内容安排如下:

  • 昨天没有学完的多对多查询补充。
  • resultMap标签的继承问题。
  • mybatis中的延迟加载。
  • colum属性的一个补充说明。

一、多对多查询

案例:查询订单,查询出下单人信息并且查询出订单详情中的商品数据。

1业务分析

一共有4张表,都是基于订单表的,我们再次梳理下它们的关系:

  • 一对一:订单和用户的关系,所以在订单类中封装了一个用户对象。
  • 一对多:订单和订单详情的关系,所以在订单实体类中封装订单详情集合。
  • 多对多:订单详情和商品的关系,它们之间的关系是依托于订单的。
image

一个订单对应多个订单详情,从而引出了多个商品。但是如果在同一个订单详情中呢?

一个订单详情对应一个商品,所以我们在订单详情中加入item实体类对象。

这个关系捋清楚了,代码也就好写了。

其中关于sql语句的编写

本来一开始时特不喜欢sql语句大写字母的,因为个人觉得其可读性差,就跟枚举一样。

不过Navicat中有一个美化SQL的功能,就是将sql语句弄成这个样子的。

我一想那肯定有它的道理,就试着用了下,慢慢地竟然觉得也挺好看的,真香。

人啊,果然最怕陷入固有的思维,不敢或者说反感去接触自身不熟悉的东西。

总觉得自己很了解自己,其实根本就不了解。

2代码编写

image

在接口OrderMapper中创建对应的查询方法,关于方法要保证见名知义。

老实说,这种大驼峰式的命名方式,我还觉得蛮好看的,可读性很强。

然后在映射文件中编写对应的sql语句。

返回值使用resultMap标签说明其映射关系。

其中resultMap标签中代码编写如下:

image

返回值都是依托于Order这个实体类的。

①一对一关系

用association标签说明Order实体类中的user属性是和User实体类对应的。

②一对多关系

用collection标签说明Order实体类中的orderdetails和List<Orderdetail>对应。

③多对多关系

在一对多关系中的一对一关系为多对多。

在同一订单详情中商品和订单详情是一对一关系,所以使用association标签说明。

值得注意的是

  • autoMapping属性为true即开启自动映射,如果控制台有的值输出为null,大概率就是没有设置自动映射的原因。
  • colum属性,是和数据库中的列名相对应的,非order的id就使用对应的外键id名,如果没有,我们可以自己创建一个别名。

关于colum属性,我做一个详细说明:

image

上图是Navicat中执行sql语句后的一张结果表,因为太长了我把它们分开了,其实就是一张表,数据由四张表组成:

该结果表中的id也就是和主表order中的id。

id1,id2,id3也就是从表各自的id,但是其顺序是可变化的,并不能成为表的唯一标识。

所以就使用外键的方式来说明从表的id,也就是user_id,item_id这些。

但orderdetail表并没有外键,就在sql语句中给它创建一个别名,也就是detail_id。

二、resultMap的继承

补充说明下这个小知识点;

image

在resultMap中有代码会出现不断地重复配置的情况,比如关于order与user的映射关系。

如果存在重复的代码,可以使用继承的方式,和Java中一样也是extend这个关键字。

在extend属性中说明需要继承的resultMap标签对应的id即可。

三、延迟加载

延迟加载的作用在于性能上的节省。

1改造一对一查询

案例:根据订单号查询出订单信息,并查询出该订单的下单人信息。

我们一开始是使用的一条sql语句完成数据库查询,可以将其改造成两条sql语句。

image

①resultMap标签中说明返回值。

②association子标签

通过select指定需要执行的查询语句。

也就是说①中的sql语句执行后,通过该属性让③中的sql语句执行。

这样就能完成两条sql语句的依次执行了。

2开启延迟加载

image

①开启延迟加载

lazyLoadingEnabled,延迟加载的全局开关,当开启时,所有关联对象都会延迟加载。

默认值是false,我们需要将其设定为true。

②开启按需加载

aggressiveLazyLoading

当开启时,任何方法的调用都会加载该对象的所有属性;否则,每个属性会按需加载。

默认值为true,这里设定false,关闭立即加载,也就是开启按需加载了。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342