田哥coder
我是田维常,一名热爱技术、热爱生活的Java程序员。专注于分享java基础、dubbo源码、zookeeper、 rabbitmq、mybatis源码、微服务springboot、集群、分布式、多线程等相关知识与实战经验。欢迎大家积极交流,共同探讨。也欢迎关注我的公众号:Java后端技术全栈。
展开
-
看我是如何轻松拿下MyBatis源码
大家好,我是田哥很多人都最讨厌源码,可是又感觉必须看,为什么感觉必须看?因为很多时候面试官喜欢问:你看过什么源码? 如果你肯多某个框架的源码,比如:Spring、Dubbo、MyBatis等其中的一个源码,那面试官至少可能好好的探讨一下。其实,要想把一个框架的源码看完那到也不是很有必要,但是主要的功能源码部分肯定得熟悉。不建议大家一开始就去看Spring源码,因为Spring太庞大了,Dubbo很多人又没用过,整体来说MyBatis不管是难度系数还是使用率,都是相对适中的。所以,我特意给大家安排了一个原创 2022-04-26 21:29:59 · 824 阅读 · 0 评论 -
第28讲:Mybatis 源码分析总结
大家好,我是田哥本文是MyBatis源码分析系列文章的第28篇,本文主要内容是MyBatis 源码分析总结关于源码,我先给大家总结三个点,然后咱们在说说MyBatis中的核心代码。三个点一、为什么纠结?因为面试的时候,面试官很喜欢问:你看过什么框架源码?JDK源码也行。这时候,如果回答没有看过,虽然没让你立马回去等通知。但也许,你在面试官心中的印象就大打折扣了。如果回答看过,并且还能较为流利地说上一番,那面试官或许会在心里赞叹:小伙子可以呀!(PS:很多面试官自己也没看过,或者看过很多也忘了)原创 2022-04-26 14:10:14 · 567 阅读 · 0 评论 -
第26讲:Mybatis 中的类型转换器如何实现?
大家好,我是田哥本文是MyBatis系列文章的第26篇,本文主要内容是深入理解Mybatis 中的类型转换器。即我们java实体类字段对应数据库表字段的转换。在前面的文章中,我们有对JDBC进行了复习:重温JDBCimport java.sql.*;public class SelectRecords { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL =原创 2022-04-26 07:52:48 · 986 阅读 · 0 评论 -
第15讲:装饰器模式
本文是MyBatis源码分析系列文章的第15篇,本文主要内饰是讲解装饰器模式以及装饰器模式在MyBatis中的应用。装饰模式,从字面意义就能看到是装饰,比如说:你买了一套300平的毛坯房,如果一般的装修,那可能就显得你房子很大,其他就没什么亮点。但是如果你要是多花点钱,搞个豪华装修,那你的房子就不仅仅是很大了,并且更能体现豪华。古话说:人靠衣装马靠鞍!其实,我在上一篇文章(代理模式)中,对装饰模式也做了一个简单的讲解。这里再强调一下:装饰器模式,在实际项目中,装饰模式的出场时间都是在老项目就行扩原创 2022-04-23 23:13:42 · 402 阅读 · 0 评论 -
第27讲:Mybatis-Spring框架实现原理
大家好,我是田哥本文是MyBatis源码分析系列文章的第27篇,本文主要内容是MyBatis-Spring框架实现原理我在使用Mybatis和Spring集成过程中一直有一个疑问,在前面的文章中我提到过,SqlSession和Mapper对象的声明周期是方法级别的,也就是每个请求的SqlSession和Mapper对象是不一样的,是一个非单例的Bean。但是Mybatis与Spring集成后,为什么我们可以直接注入Mapper对象,如果通过直接注入的话Mapper对象却成了单例的了?这个问题在技术群原创 2022-04-26 13:55:33 · 899 阅读 · 0 评论 -
第25讲:MyBatis的插件机制是如何实现的
大家好,我是田哥本文是MyBatis源码分析系列文章的第25篇,本文主要内容是深入理解MyBatis的插件机制。猜测1.这个分页插件无非就是在我们的查询条件上拼接了个limit和做了一个count查询。2.我们这里使用的是Mysql作为数据库,如果是Oracle的话那就不是limit了,所以这里肯定有多重数据库对应的方案。3.在没有此插件的前面拦截并做了sql和相关处理。根据官网快速入门插件下面是来自官网的一段话。MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,原创 2022-04-26 07:42:11 · 148 阅读 · 0 评论 -
第24讲:Mybatis 的缓存,到底是如何实现的?
大家好,我是田哥本文是MyBatis源码分析系列文章的第24篇,本文主要内容:Mybatis 中的缓存如何实现?我们在前面的文章里,已经有对Mybatis 的缓存的使用进行了讲解,另外,也在前面的源码分析中也讲到一些。本文就把缓存这块深入的聊聊。其实关于缓存,现在基本上在每个公司都在用,用的最多的比如说Redis,这里的缓存也称之为分布式缓存(第三方的缓存),还有另外一种缓存就是本地缓存。目的:减轻数据库的压力下面是不使用缓存和使用缓存的对比:使用缓存了,下次再查询同样的数据时,就直接从原创 2022-04-23 17:42:50 · 188 阅读 · 0 评论 -
第23讲:结果集ResultSet映射成实体类对象
大家好,我是田哥上一讲中,我们已经知道MyBatis是如何执行SQL语句了,接下来我们继续来聊聊,返回的结果集是怎么处理的。本文是MyBatis源码分析系列文章的第23篇,主要内容:结果集ResultSet映射成实体类对象接着上一篇文章,我们已经将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集 ResultSet 自动映射成实体类对象。这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中。这可大大降低开发的工作量,提高工作效率。映射结果入口我们来看看上次看源码的位置原创 2022-04-23 17:38:10 · 941 阅读 · 0 评论 -
第22讲:MyBatis 到底是怎么 执行 SQL 语句 的?
大家好,我是田哥本文是MyBatis源码分析系列文章的第22篇,本文主要内容:MyBatis 到底是怎么执行 SQL 的呢?在前一篇文章中我们已经清楚的知道userMapper 就是一个MapperProxy代理对象。那么我们执行下面这行代码的时候:User user = userMapper.selectUserById(1);老规矩,先看一个整体过程:调用invoke()方法就应该调用MapperProxy的invoke方法(不明白为什么调用这个invoke()方法的,请自行补一下JD原创 2022-04-23 17:31:35 · 635 阅读 · 0 评论 -
第21讲:UserMapper 接口的方法,怎么就能直接调用呢?
大家好,我是田哥本文是MyBatis源码分析系列文章的第21篇,本文我们继续分析UserMapper接口方法,为什么就能直接调用?再回上一篇文章的开始的那段代码里: public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { XMLConfigBuilder parser = new XMLConfigBuilder(input原创 2022-04-22 18:44:19 · 1205 阅读 · 0 评论 -
第20讲:Mybatis 中 XML 文件是如何解析的?
大家好,我是田哥本文是MyBatis源码分析系列文章的第20篇讲,本文主要内容:MyBatis 中 XML 文件是如何解析的?从这一节开始,我们讲开启MyBatis源码分析阶段,下面我们以xml方式进行分析。MyBatis使用案例我们先来一个案例,后面我们就尽量使用案例和源码进行分析。添加MyBatis和MySQL相关pom依赖。<!-- Mybatis依赖 --><dependency> <groupId>org.mybatis</gro原创 2022-04-22 18:37:37 · 2561 阅读 · 1 评论 -
第19讲:MyBatis源码整体认识
第19讲:MyBatis源码整体认识本文主要内容:源码下载如何下载源码?进入官网:https://mybatis.org/mybatis-3/zh/index.html方法一跳转到github上,我们可以在github上下源码:https://github.com/mybatis/mybatis-3下载源码:方法二也可以通过https://github.com/mybatis/mybatis-3/releases下载对应版本jar和源码:下载到本地后,解压到自己的本地目原创 2022-04-26 20:45:15 · 164 阅读 · 0 评论 -
第17讲:责任链模式
家好,我是田哥本文是MyBatis源码分析系列文章的第28篇,本文主要内容是:责任链模式的生活案列、使用场景、时间使用案例、在MyBatis中是如何使用的。相信大家都玩过关卡游戏,在这类关卡游戏中,只有当你通过第一关才能进入第二关,通过第二关才能进入第三关。以此类推。以王者荣耀为例,强青铜、持续白银、荣耀黄金、尊贵铂金、永恒钻石、至尊星耀、最强王者、荣耀王者 。(上赛季开始,好像多了个无双王者,王者星25颗)哈哈哈,扯远了,大家还是少玩游戏,多学点东西。另外,再举个例子:我们在每家公司,原创 2022-04-26 14:29:15 · 1799 阅读 · 0 评论 -
第14讲:代理模式
大家好,我是田哥本文是MyBatis源码分析系列文章的第14篇,本文内容:代理模式(代理模式、静态代理模式、动态代理模式、策略模式)代理模式两个有趣故事老田买火车票买火车票已经是很老的话题了。老田以前每年都会坐绿皮车回家过年,幸运的是这两年老家市区也有高铁了,少了些许奔波。现在就来回忆下当年的情景:每到年底最头疼的就是抢火车票,每次都需要去火车站排队买票。因为只要网上的票一开始出售,基本上都是手慢无,最后就只能在周末时去火车站买票了。但是,有一次无意间听说黄牛可以帮忙买票,只是要付点手续费。于是,原创 2022-04-23 17:49:58 · 241 阅读 · 0 评论 -
第13讲:模板方法模式
大家好,我是田哥本文是MyBatis源码分析系列文章的第13篇,本文主要模板方法模式 (模板方法模式在MyBatis、Spring中是如何使用的)这也是MyBatis中设计模式系列的第一篇,后面还有相关设计模式文章。概述模板模式就是定义一个操作中的算法骨架,然后将一些步骤延迟到子类中。模板方法使得子类在不改变算法的结构即可重定义该算法的某些步骤。使用场景泡茶我们都知道泡茶基本步骤有:烧水、选茶叶、泡茶、喝茶水。这里指的是一般步骤。至于你烧水时用什么烧?热得快、热水壶、还是其他工具,反正目的原创 2022-04-22 18:00:11 · 87 阅读 · 0 评论 -
第12讲:如何逆向生成代码
大家好,我是田哥本文是MyBatis源码分析系列文章的第12篇,本文主要内容: 逆向生成MyBatis相关代码在做项目过程中,当面对很多表时,手动编写Mapper.xml、Mapper.java和pojo工作量非常大,尤其是数据库表很多或者表字段很多的情况下很泪崩,同时还容易出错,从而会导致后面自测的时候花大量时间去修改问题。更可能的是陷入了写bug,改bug的循环中。这个逆向生成代码,很多公司是禁止使用的,所以,我们在用的时候要看看自己团队是否对此有所限制。针对这一痛点,mybatis官方提供原创 2022-04-22 17:51:17 · 908 阅读 · 0 评论 -
第11讲:MyBatis中常见的异常分析
大家好,我是田哥本文是MyBatis源码分析系列文章的第11篇,本文主要内容:常见的异常分析下面是我给大家总结的MyBatis常见异常级原因说明。具体内容如下:参数名不对Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for错误:匹配不了原因:配置文件中的id方法名和dao接口中的方法名不一致出现多条数据executor.ExecutorExc原创 2022-04-22 11:34:17 · 967 阅读 · 0 评论 -
第10讲:教你如何使用分页插件
大家好,我是田哥本文是MyBatis源码分析系列文章的第10讲,目前还是偏向于实战。本文主要内容:MyBatis如何使用分析插件进行分页查询。PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美。原本以为分页插件,应该是很简单的,然而PageHelper比我想象的要复杂许多,它做的很强大,也很彻底,强大到使用者可能并不需要这么多功能,彻底到一参可以两用。但本人觉得作为分页插原创 2022-04-22 11:21:36 · 366 阅读 · 0 评论 -
第09讲:快速集成Spring Boot+ Mybatis
大家好,我是田哥本文是MyBatis源码分析系列文章的第09篇,如果您是一篇一篇的看到第9篇,那是非常棒的。总之,加油,学到了就是自己的!本文主要内容是快速集成Spring Boot+ MyBatis前言我在公众号里,之前写过 Spring Boot集成JPA,但是由于很多小伙伴的项目中用的并不是JPA,用的是Mybatis,并且我也调查过很多朋友,三个ORM框架使用比例大致为Mybatis:JPA:Hibernate:其他=6:3:0.5:0.5面试题:Mybatis和Hibernate原创 2022-04-22 11:09:17 · 125 阅读 · 0 评论 -
第08讲:巧用Mybatis中的缓存
大家好,我是田哥本文是MyBatis源码分析系列的第8篇文章,老铁加油哦!不经历风雨,怎么能见彩虹!在MyBatis中,缓存是一个非常重要的知识点,尽管很多人在工作中,没怎么注意没怎么使用过,但是,一旦倒了面试中,只要面试官问MyBatis相关的面试题,那么MyBatis的缓存设计是一定跳不掉的。本文就来详细的说说MyBatis缓存,本文重点在使用层面和一些理论知识,关于源码,后面有专门的的文章讲解。好了,我们步入正题。目前,市面上都很流行使用Redis作为数据库缓存,这属于分布式缓存,也可原创 2022-04-22 10:59:38 · 126 阅读 · 0 评论 -
第07讲:掌握 Mybatis 中的流式查询
大家好,我是田哥本文是MyBatis源码分析系列的第7篇文章,加油,只有坚持到最后的才是王者。关于MyBatis的流式查询,估计部分人估计见过,但是也基本上没用过,甚至很多人都没有听说过。本讲中,我们将一起来学习MyBatis的流式查询。听起来很牛逼的,但是其实也没有想象中的那么可怕。看完相信大家会有所改观。话不多说,我们直入主题。基本概念MyBatis的流式查询到底是什么?流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低原创 2022-04-22 10:50:48 · 585 阅读 · 2 评论 -
第06讲:掌握 Mybatis 中延迟加载
本文是MyBatis源码分析系列文章的第6讲,建议大家先看前面,一步一个脚印的来。所谓延迟加载,就是第一时间不会加载,而是在需要的时候再去加载。本讲中,我们重点就来聊赖MyBatis中的延迟加载。我们在UserMapper.xml中,resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。业务场景:多有的技术都是围绕着业务转的,所以,我们先来看看下面这种业务场景:如果查询订单并且原创 2022-04-22 10:48:04 · 169 阅读 · 0 评论 -
第05讲:掌握 Mybatis 两种使用方式(xml与注解)
MyBatis 提供了XML配置和注解配置两种方式。 今天就来搞搞这两种方式是如何实现的。MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。来自官网。Mybatis映射九个顶级元素:mapper:映射文件的根节点,只有一个属性namespace(命名空间),作用如下:原创 2022-04-20 10:28:32 · 1176 阅读 · 0 评论 -
第04讲:快速掌握 MyBatis 动态标签
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识原创 2022-04-20 10:20:39 · 98 阅读 · 0 评论 -
第03讲:Mybatis 实现原理
本文主要内容:Mybatis工作流程Mybatis工作流程可以大致分为四个步骤:下面我们就来说说这四个步骤:加载配置并初始化触发条件:加载配置文件,比如:全局配置文件、XxxMapper.xml配置文件等。配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。接收调用请求触发条件:调用Mybatis提供的API传入参数:为SQL的ID和传入原创 2022-04-20 10:12:47 · 130 阅读 · 0 评论 -
第02讲:快速入门 Mybatis
第02讲:快速入门 Mybatis本文主要内容:传统JDBC传统JDBC编码格式public class DataBaseUtil { public static final String URL = "jdbc:mysql://localhost:3306/mblog"; public static final String USER = "root"; public static final String PASSWORD = "123456"; public原创 2022-04-20 10:09:37 · 388 阅读 · 0 评论 -
第01讲:重温 JDBC
第01讲:重温 JDBC何为 JDBC ?JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,注意:本文中的代码都是针对MySQL数据库实现的。JDBC 架构分为双层架构和三层架构。双层作用:此架构中,Java Applet 或应用直接访问数据源。条件:要求 Driver 能与访问的数据库交互。机制:用户命令传给数据库或其他原创 2022-04-20 10:06:51 · 181 阅读 · 0 评论 -
给,我私藏的26道MyBatis面试题~(文末附圣诞福利)
关注“Java后端技术全栈”回复“面试”获取全套面试资料1.JDBC有几个步骤?JDBC大致可以分为六个步骤:加载驱动程序获得数据库连接创建一个Statement对象操作数据库,实现增删...原创 2020-12-25 08:00:00 · 300 阅读 · 0 评论 -
一周学完MyBatis源码,万字总结
关注公众号“java后端技术全栈”回复“000”获取优质面试资料大家好,我是老田。之前,我给大家分享给很多MyBatis源码分析的一系列文章。今天,就自己的感受来做一个整体的总结。众所周...原创 2021-11-05 21:30:00 · 391 阅读 · 0 评论 -
怒肝一夜 | Mybatis源码深度解析
关注“Java后端技术全栈”回复“面试”获取全套面试资料本文:12006字,阅读时长:10分15秒前面已经发过Mybatis源码解析的文章了,本文是对前面文章进行精简以及部分调整优化,总...原创 2021-01-04 09:00:29 · 962 阅读 · 1 评论 -
小师妹问我:Mybatis常见注解有哪些?
关注“Java后端技术全栈”回复“面试”获取全套面试资料当下,注解非常流行,以前很长篇的代码,现在基本上一个注解就能搞定。那,在Mybatis中又有哪些注解呢?Mybatis中的注解基本...原创 2020-12-22 08:00:00 · 1199 阅读 · 5 评论 -
Mybatis插件原理详解<下篇>
关注“Java后端技术全栈”回复“面试”获取全套面试资料上次发文说到了如何集成分页插件MyBatis插件原理分析,看完感觉自己better了,今天我们接着来聊mybatis插件的原理。插...原创 2020-12-18 08:00:00 · 242 阅读 · 1 评论 -
Mybatis中方法和SQL是怎么关联起来的呢?
今天是Mybatis源码分析第四篇,也是最后一篇。老规矩,先上案例代码:publicclassMybatisApplication{publicstaticfinalStringURL="jdbc:mysql://localhost:3306/mblog";publicstaticfinalStringUSER="root";publicstaticfinalStringPASSWORD="123456";publi...原创 2020-12-31 08:51:34 · 337 阅读 · 0 评论 -
@万字长文 | MyBatis 缓存到底是怎么回事?
关注“Java后端技术全栈”回复“面试”获取全套面试资料在 Web 应用中,缓存是必不可少的组件。通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请...原创 2020-12-19 15:59:36 · 269 阅读 · 3 评论