别怕看源码,一张图搞定Mybatis的Mapper原理

目录

简单使用

引出主题

看图

提到看源码,很多同学内心的恐惧的,其实这个从人性的角度来说是非常正常的,因为人们对未知的事物,都是非常恐惧的,其次,你内心可能始终觉得,好像不会原理也还是能工作啊,你的潜意识里没有强烈的欲望.从阅读源码的经历来说,Java三大框架SSM中,Mybatis的源码是最适合入门的.

简单使用

这是一个简单的Mybatis保存对象的例子

@Test
public void testSave() throws Exception {//创建sessionFactory对象SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));//获取session对象SqlSession session = sf.openSession();//创建实体对象User user = new User();user.setUsername("toby");user.setPassword("123");user.setAge(23);//保存数据到数据库中session.insert("com.toby.mybatis.domain.UserMapper.add", user);//提交事务,这个是必须要的,否则即使sql发了也保存不到数据库中session.commit();//关闭资源session.close();
}
<mapper namespace="com.toby.mybatis.domain.UserMapper"><!--#{}在传入的对象中找对应的属性值--><!--parameterType传入的参数是什么类型--><insert id="add" parameterType="com.toby.mybatis.domain.User">INSERT INTO USER (username,password,age) VALUES (#{username},#{password},#{age})</insert>
</mapper>

引出主题

但是在实际中,我们都不是这样操作的,我们是通过Mapper接口,调用接口方法,就能实现CRUD操作,那么关键是,这个接口究竟做了什么事,才是我们关心的.

只要把下面这段代码究竟发生了什么事弄明白,就明白,这个Mapper接口究竟做了什么事.

public void testGetObject() throws Exception {SqlSession session = MybatisUtil.openSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.get(5L);System.out.println(user);session.close();
}
public interface UserMapper {public void add(User user);public User get(Long id);
}

看图

但是我认为,一张流程图就能够看明白这期间所发生的事

1.invoke方法什么时候执行的?
jdk动态代理创建代理对象的时候需要传入三个参数,分别为(1)类加载器,(2)为哪些接口做代理(拦截什么方法),(3)把这些方法拦截到哪里处理,从图中我们得知,他是要把执行的方法拦截到MapperProxy类中的invoke方法处理,换句话说,该动态代理对象执行接口中的方法,都会调到MapperProxy类的invoke方法处理,这也就是为什么调用get方法的时候会调用invoke
2.执行过程
图中已经比较明显,那我还是文字给你简单描述一下原理.mapper文件中要定位到sql,需要两个条件,一个是namespace,一个是sql id.要想用这种mapper接口的方式调用也必须遵循一个约定,那就是namespace等于接口的全限定名.接口的方法名等于xml文件中的sql id,这就是为什么图中封装MapperMethod的时候,需要把这两个传进去的原因.确定了sql,传入参数mapperMethod.execute(args),拼接成一条完成sql,执行之.

心血来潮再补上一张时序图

想了解Mybatis缓存的移步Hibernate和Mybaitis缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别怕,“卷积”其实很简单

以前的文章没法用推荐卡&#xff0c;这是我2017年写的&#xff0c;所以重新发表一次&#xff0c;大家温习温习~ 前言 相信很多时候&#xff0c;当我们在看到“卷积”时&#xff0c;总是处于一脸懵逼的状态&#xff0c;不但因为它的本身概念比较难理解&#xff0c;还因为它在不…

赵小楼《天道》《遥远的救世主》深度解析(124)遇事别怕,出事别躲

关注赵小楼&#xff0c;与10000人一起重读天道&#xff0c;学习强势文化思维&#xff01; 本文是按《遥远的救世主》小说情节深度解析的第124集&#xff0c;按小说解读完后会按《天道》电视剧不同于小说的情节解读&#xff0c;按情节全部解读完&#xff0c;会出专题解读系列【总…

年终总结没有思路?别怕,这里有一个万能写法

一晃又到了年底&#xff0c;年终总结又要开始准备了~ 最近很多小伙伴在后台留言&#xff0c;希望我们出一篇「如何做好年终总结」的文章。 害&#xff0c;谁让我不忍拒绝你们呢&#xff0c;安排&#xff01; 年终总结其实并不难写&#xff0c;很多人感觉难写的原因一般有两个…

亚马逊被关联?别怕有救

我的亚马逊被关联了&#xff0c;最近我们身边充斥着这样的声音。亚马逊 突如其来的大规模查封账号让不少跨境人苦不堪言。伤心过后我们来看看亚马逊账户是怎么关联的&#xff0c;之后又怎么解决呢。 亚马逊被关联是平台误操作&#xff0c;有救 如果是因为平台的误操作导致亚马…

写简历没模板?别怕,这些开源项目帮你搞定!

大家好&#xff0c;我是 JackTian。 今年因特殊原因&#xff0c;有一些小伙伴想着在年后跳槽找一份好工作&#xff0c;而恰恰无法预料到会发生这样的事情&#xff0c;所以导致失业甚至只能在原单位忍受着了。 找工作的第一件事情&#xff0c;就是写简历。往往写出一份好的简历…

别怕,BCH无惧攻击

对于数字货币来说最害怕的莫过于黑客和51%攻击。前有黑客利用以太坊 ERC-20 智能合约中的漏洞攻击美链和SMT&#xff0c;导致其币价几乎归零。后有比特币黄金BTG和XVG遭受黑客51%攻击损失惨重。因此每当听到有这一类的消息时&#xff0c;大家的心情都会变得沉重起来。 最近比特…

阳了别怕,保护好自己

关注、星标公众号&#xff0c;直达精彩内容 图片素材来源&#xff1a;网络素材 作者&#xff1a;技术让梦想更伟大 | 李肖遥 最近已经陆续有四五个同事&#x1f40f;了&#xff0c;如果是上一周&#xff0c;那我现在也是妥妥的密接了&#xff0c;不过现在放开的趋势愈发明显&am…

别怕,只是孤独

写于2019-09-21 对&#xff0c;这个标题是来自一期脱口秀。让我想&#xff0c;孤独是什么&#xff1f;其实我也不知道。可能是某一刻突然地就心酸了一下&#xff0c;过会儿发现其实也没啥&#xff0c;不就是孤独嘛。 ​ 看了百度百科对孤独的解释&#xff0c;也就是孤单一个人…

暴跌不期而至

‍‍ 原标题&#xff1a;当你还在用ChatGPT瞎聊时&#xff0c;有人早已用AIGC赚到了数百万美元 * * * 隔夜比特币表现平稳&#xff0c;仍在23k上方震荡。就在发文的一刹那&#xff0c;暴跌不期而至。比特币极速下挫至22k。 * * * AIGC 是 AI Generated Content&#xff08;AI&a…

拍视频没有素材怎么办?chatGPT来帮您!!!

以下是一个有趣的笑话脚本&#xff1a; 【脚本开始】 场景&#xff1a;办公室 角色&#xff1a;杰克&#xff08;中年男性&#xff09;、莉莉&#xff08;年轻女性&#xff09; 杰克&#xff1a;嘿&#xff0c;莉莉&#xff01;你听说过新的办公室笑话吗&#xff1f; 莉莉&…

【ChatGPT系列话题】金融行业大语言模型应用落地

易观&#xff1a;ChatGPT和GPT-4陆续发布&#xff0c;引发了我们对于大模型在各个行业可能应用方向的想象与探索&#xff0c;包括今天我们重点提到的金融行业。在金融行业&#xff0c;大模型有非常多的应用场景&#xff0c;包括投研、产品研发、授信审核等&#xff0c;例如使用…

LLaMA模型微调版本 Vicuna 和 Stable Vicuna 解读

Vicuna和StableVicuna都是LLaMA的微调版本&#xff0c;均遵循CC BY-NC-SA-4.0协议&#xff0c;性能方面Stable版本更好些。 CC BY-NC-SA-4.0是一种知识共享许可协议&#xff0c;其全称为"署名-非商业性使用-相同方式共享 4.0 国际"。 即 用的时候要署名原作者&#x…

什么是In-Context Learning(上下文学习)?

©作者 | 董冠霆 单位 | 北京邮电大学 研究方向 | 自然语言理解 前言 随着大模型&#xff08;GPT3&#xff0c;Instruction GPT&#xff0c;ChatGPT&#xff09;的横空出世&#xff0c;如何更高效地提示大模型也成了学术界与工业界的关注&#xff0c;因此 In-context learn…

ACL2023论文写作能否使用ChatGPT?

每天给你送来NLP技术干货&#xff01; 来自&#xff1a;HFL实验室 随着以ChatGPT为代表的生成式AI的火热&#xff0c;近期人工智能领域的顶级会议相继推出相关政策以进一步规范这类工具在科学文献撰写中的使用。ACL 2023程序委员会主席在近期的一篇博客中披露了ACL 2023大会的相…

五年引用3.8万次,Transformer宇宙发展成了这样,ChatGPT只是其中之一

©作者 | 袁铭怿、陈萍 来源 | 机器之心 关于 Transformer &#xff0c;这是一篇很好的学习指南&#xff0c;可以帮助你熟悉最流行的 Transformer 模型。 自 2017 年提出至今&#xff0c;Transformer 模型已经在自然语言处理、计算机视觉等其他领域展现了前所未有的实力&am…

很全面的提示工程指南(包含大量示例!)

提示工程指南 提示工程介绍基础提示配置参数的含义标准提示语提示语的要素提示设计的一般技巧从简单的提示开始指令&#xff08;Instruction&#xff09;具体&#xff08;Specificity&#xff09;避免不精确的描述&#xff08;Preciseness&#xff09;避免说不要做什么 基础提示…

PgSQL修改登录密码

&#xff08;1&#xff09;首先必须在安装postgerSql的服务器上进行操作。先找到postgerSql的安装目录&#xff0c;如下图所示。 &#xff08;2&#xff09;在postgerSql的安装目录下&#xff0c;找到data文件夹下的pg_hba.conf文件&#xff0c;用文本文档编辑工具打开该文件。…

admin是谁,以及如何修改admin密码

一、admin是谁&#xff1f; admin是多可文档管理系统默认的系统管理员。当你安装完多可文档管理系统后&#xff0c;立刻就能通过他来登陆多可系统。 admin是包含在用户数里的。如果你用的是10个用户的免费版&#xff0c;那么admin就会占用一个用户&#xff0c;也就是说你可以…

chatgpt赋能Python-python_ichat

Python iChat: 一款高效的通讯工具 如果你正在寻找一款既功能全面、又易于使用的通讯工具&#xff0c;那么Python iChat就是你所需要的。Python iChat是一款基于Python编程语言的开源通讯应用程序&#xff0c;它具有轻巧、快速、易扩展等特点&#xff0c;因此得到了众多开发者…

从零开始,通过 ChatGPT-4 十分钟开发了一个浏览器插件,并成功运行

点击上方“Java基基”&#xff0c;选择“设为星标” 做积极的人&#xff0c;而不是积极废人&#xff01; 每天 14:00 更新文章&#xff0c;每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应…