面渣逆袭:二十二图八千字二十问,彻底搞定yatis!腾讯云开发者社区

为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

JDBC编程有哪些不足之处,MyBatis是如何解决的?

PS:直接用Hibernate的应该不多了吧,毕竟大家都是“敏捷开发”,但架不住面试爱问。

相同点

不同点

MyBatis和Hibernate的适用场景?

MyBatis基本使用的过程大概可以分为这么几步:

MyBatis生命周期?

上面提到了几个MyBatis的组件,一般说的MyBatis生命周期就是这些组件的生命周期。

当然,万物皆可集成Spring,MyBatis通常也是和Spring集成使用,Spring可以帮助我们创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到我们的 bean 中,我们不需要关心它们的创建过程和生命周期,那就是另外的故事了。

ps:接下来看看Mybatis的基本使用,不会有人不会吧?不会吧!

方法1:顺序传参法

方法2:@Param注解传参法

方法3:Map传参法

方法4:Java Bean传参法

当然可以,不止支持一对一、一对多的关联查询,还支持多对多、多对一的关联查询。

​ 那么多对一、多对多怎么实现呢?还是利用<association>和<collection>,篇幅所限,这里就不展开了。

MyBatis中有一些支持动态SQL的标签,它们的原理是使用OGNL从SQL参数对象中计算表达式的值,根据表达式的值动态拼接SQL,以此来完成动态SQL的功能。

![

第一种方法:使用foreach标签

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有item,index,collection,open,separator,close。

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有以下3种情况:

看看批量保存的两种用法:

我们已经大概知道了MyBatis的工作流程,按工作原理,可以分为两大步:生成会话工厂、会话运行。

MyBatis是一个成熟的框架,篇幅限制,这里抓大放小,来看看它的主要工作流程。

构建会话工厂

构造会话工厂也可以分为两步:

会话运行

会话运行是MyBatis最复杂的部分,它的运行离不开四大组件的配合:

整体上总结一下会话运行:

PS:以上源码分析比较简单,在真正的源码大佬面前可能过不了关,有条件的建议Debug一下MyBatis的源码。

我们最后把整个的工作流程串联起来,简单总结一下:

我们一般把Mybatis的功能架构分为三层:

四个字回答:动态代理,我们来看一下获取Mapper的过程:

Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。

作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。

Mybatis中如何指定使用哪一种Executor执行器?

插件的运行原理?

Mybatis会话的运行需要ParameterHandler、ResultSetHandler、StatementHandler、Executor这四大对象的配合,插件的原理就是在这四大对象调度的时候,插入一些我我们自己的代码。

Mybatis使用JDK的动态代理,为目标对象生成代理对象。它提供了一个工具类Plugin,实现了InvocationHandler接口。

使用Plugin生成代理对象,代理对象在调用方法的时候,就会进入invoke方法,在invoke方法中,如果存在签名的拦截方法,插件的intercept方法就会在这里被我们调用,然后就返回结果。如果不存在签名方法,那么将直接反射调用我们要执行的方法。

如何编写一个插件?

MyBatis是如何分页的?

MyBatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

THE END
0.Java刷题———Java的零星使用(一)为什么不用变量也可以点方法在初识break和continue时,可能注意力主要关注于二者的区别上,所以焦点放在一个是“跳出循环”,一个是“执行下一轮循环”,这是“横向”对比。但是学习带label上,则要“纵向”对比:带label的和不带label的对比: 带label的break是直接跳出label循环 带label的continue是停止执行label循环后面代码,执行 jvzquC41dnuh0lxfp0tfv8UtqNgzojs1ctzjeuj1fgzbkux1::672:62
1.股票投资价值分析汇总十篇层次分析法(analytical hierarchy process,简称AHP法),由美国运筹学家Satty于20世纪70年代提出,是一种定性与定量分析相结合的多准则决策方法,具体分为五个步骤:根据总目标明确问题,分解问题并构建层次分析模型,根据隶属关系构造判断矩阵,层次单排序和层次总排序。运用AHP的关键是构造满意一致性矩阵,但由于人们主观意识对jvzquC41yy}/z~jujw4dqv3ep1nbq€jp166:3A3jvor
2.黄梅戏女驸马通用12篇应进一步加大黄梅戏艺术院团改革力度,加快改革管理体制,创新激活运行机制,尊重艺术发展规律,遵循市场经济规律,着力构建新型管理体制和运行机制,健全完善投入扶持、评价奖励等机制。从组织领导到政策措施,从人才培养到院团体制,从剧本创作到理论研究,从艺术生产到市场开拓,从精品攻关到普及推广,采取切实有效的措施和办法,充分jvzquC41yy}/z~jujw4dqv4jcq}fp86362:10qyon
3.javascript中面向对象的两种构建方式(构造函数)和(原型模式的区别)1、构造函数模式---》alert的结果为false <!DOCTYPE html>DocumentfunctionPerson(name,age,job){this.name=name;this.age=age;this.job=job;this.showname=function(){ alert(this.name); }this.showage=function(){ alert(this.age); }this.showjob=function(){ alert(this.job); } }vartom=newPersonjvzquC41yy}/ewgnqiy/exr1jq{{klmkiwueqwl1r1?12@7270nuou
4.吴迪陈耀东宅基地使用权信托制度构建三、宅基地信托模式的构造 宅基地信托流转目前在我国实务界还是一片空白,具体应如何设计相应的框架和制度,可以参考土地承包经营权信托的经验并做出适度调整。宅基地信托的过程中,宅基地所有权并不发生转移,而是形式上通过登记的方式发生转移。信托机构形式上获得宅基地的“所有权”外观,但宅基地作为信托财产,其所有权仍jvzquC41knrtu7lfwhy/gmz0ep5jpot132851:5;:34ivv
5::《法学研究》2021年第3期要目内容提要:域外管辖的理论构造和国内法域外适用的体系构建是我国当前面临的重大课题,其中关键之处是需对域外立法管辖和域外司法管辖作出恰当界分。无论对于域外立法管辖还是对于域外司法管辖,公法和私法的区分都构成了理论和实践展开的基础。各国立法管辖和司法管辖均不同程度地超越了属地原则。域外立法管辖的基本jvzq<84kqngx0lxup0io1stwtpgm1o}{l1814:571v814:5748e65<;4324tj}rn
6.Python创建二维数组与初始化的实践举例python2.1 利用list自身进行构造 list自身的构造函数形式多种多样。想构建一个二维数组自然并非难事。 例如,想要构建一个m行n列的二维数组。可以这样初始化。 1 L=[[]*n]*m 展示结果如下: 如果想要给一个初始化的值,可以写成: 1 L=[[0]*n]*m 则: jvzquC41yy}/lk:30pku1jwvkerf1;;;88>/j}r
7.日本“妖怪事件”的现代构建——基于《怪谈》和《化物语》的比较在这股文化热潮之下“妖怪”不再仅仅是“古老传说”的“再呈现”,而是以一种现代趣味进行了重新的构建。新的妖怪形象与传统妖怪到底有什么区别?这些区别又反映出在“话语”的背后,日本人的民族性格和对社会秩序的理解产生了怎样的变化呢?本篇文章试图从这两个问题入手,将小泉八云在《怪谈》中搜集的经典妖怪传说《jvzquC41oq|jg7iqwdgo0lto1tkwkn|1366659::1
8.双碳目标下转型金融驱动高耗能行业碳减排的机制及路径研究在联合国环境规划署所构建的可持续金融框架中,绿色金融与共同致力于减缓气候变化,服务于实现《巴黎协定》中所设定的减排目标。但转型金融与绿色金融间存在共同的目的与业务内容上的区别,从概念角度来说,绿色金融(GreenFinance)按照中国人民银行的说法:是指为支持环境改善、应对气候变化和资源节约高效利用的经济活动,即对jvzquC41|khp0myyy4dqv4oujyij87246711}7246714:;>:0jvs
9.【华泰金工林晓明团队】行业配置策略:趋势追踪视角——华泰基本面轮动系趋势追踪指标间的本质区别在于对历史价格的加权方式 不同趋势追踪指标的构建具有非常相似的逻辑,可以看成是对过去一段时间的资产价格或是收益率赋予不同的权重,并将过去加权的结果用于对未来的预测中。Ari Levine和Lasse Heje Pedersen在“Which Trend is Your Friend?”(2015)文中给出了趋势签名图(trend signature jvzq<84hkpgoen3ukpg/exr0ep5tvxhm1uzpetov1814922;/621mte/kowj~nrr3>6;?760unuou
10.Java设计模式二构建者模式本文介绍了构建者模式的基本概念,包括其角色定义、与工厂模式的区别,以及为何和何时使用构建者模式。并通过MyBatis框架中的具体应用案例,如MappedStatement和SqlSessionFactory的构建过程,进一步解析构建者模式的实际运用。 一、构建者模式: 1、介绍: 建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使同样的构建jvzquC41dnuh0lxfp0tfv8YVFtkbo]Y1ctzjeuj1fgzbkux132?27<754