![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MyBatis
文章平均质量分 64
卡布奇诺-海晨
《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。有研究MyBatis的经验,设计模式,基本算法,也有相关的博文输出。未来时间允许情况下,推出更多的关于框架源码的知识以及结合工作经验的沉淀。程序员这条路一开始走对了后面就轻松些,作为过来人,有经验感受在博文透露。程序员这条路最好有个引路人,每个人都可以努力,但是方向不对努力白费。某音有视频教程(某马/某千等都是上万价格)
展开
-
框架源码常客JDK动态代理模式
实验不会说谎,多动动手去做做实验,加深印象。改变一些数据,你可能获得意外的惊喜噢!本篇文章是本人在研究MyBatis源码时总结出的一些结论,含金量饱满,分享给大家,可谓用心良苦。原创 2022-06-03 11:44:04 · 283 阅读 · 0 评论 -
MyBatis的核心执行流程
MyBatis的其他查询、修改、删除执行流程都是这个走向,感兴趣的读者可以把它收藏起来仔细研究研究。笔者还有其他关于MyBatis的文章,可以关注一下不迷路,在主页就可以查看哦!后续也会陆陆续续出一些关于MyBatis的文章。最后说一下的是,程序员这条路,最好是有一个引路人。.........原创 2022-06-03 12:05:49 · 591 阅读 · 3 评论 -
一封来自程序员的信
我现在就是专攻MyBatis源码,已经有了不少成果。顺便说一下的是,HashMap源码也是必须读的,在很多公司面试的时候都喜欢提问。恶补HashMap源码后,在一次面试上面,我吊打了一下面试官哈哈哈。源码这条路一开始是比较难走的,很多人都不知道打开方式是什么,故都是半途而废,前功尽弃。所以程序员这条路最好是有个引路人,这样可以节省时间以及精力,快速进入行业某些领域。别人花几年甚至十年才开始搞懂的事情,你不用一年就可以了。原创 2022-05-30 17:50:11 · 1215 阅读 · 0 评论 -
面试高薪必备MyBatis执行流程
一、前言 MyBatis至今被越来越多的公司青睐,其中的原因是它更加轻量级,可控性更高。许许多多的大中小型公司都喜欢在面试的时候提及MyBatis的原理或者MyBatis中一些重要的组件及实现。而与之增强版本MyBatis-Plus同样在面试上面被提问,懂得MyBatis的离理解MyBatis-Plus就不远了。两者差别在于对SQL的处理方式有所不同而产生了差异。MyBatis有着不胜枚举的优良地方值得我们学习,在前面的一些文章中笔者也提及了,需要了解的童鞋可以访问主页自行学习,后续也会不断的..原创 2022-05-30 19:53:09 · 506 阅读 · 2 评论 -
MyBatis为何如此优秀
一、MyBatis为何如此优秀,从中我们可以学到什么? 一个优秀的框架并非一朝一夕之事,它的出现背后靠的的是一个优秀的团队。他们功底扎实,对业界的理论了如指掌,善于取其精华去其糟粕,发扬光大。 收,来点实际一点的。MyBatis的优良特点之一是它良好的封装性。那它的封装体现在哪些地方呢,为什么要封装呢?带着这些问题继续往下读。当原始类不满足现有需求/功能设计,又或者与新的类一起发挥作用效果更好(复用等)等时,就考虑封装它以提供对外更加良好完善的服务。例如原始类ClassLoader与自建...原创 2022-05-22 14:41:00 · 250 阅读 · 0 评论 -
盘点MyBatis优良设计之接口及其实现类间的故事
一、前言二、原创 2022-04-22 13:33:46 · 2725 阅读 · 3 评论 -
MyBatis是如何加载配置文件的2
一、二、源码1、ClassLoaderWrapper/** * A class to wrap access to multiple class loaders making them work as one * * @author Clinton Begin */public class ClassLoaderWrapper { ClassLoader defaultClassLoader; ClassLoader systemClassLoader; ClassL原创 2022-04-19 12:31:20 · 616 阅读 · 0 评论 -
MyBatis是如何加载配置文件的1
一、回顾 早在<<Java获取MySQL连接的演变>>中就已经提及了ClassLoader类加载器加载配置文件,都知道可以通过类名.class获取Class对象,然后获取类加载器去加载配置文件返回InputStream。Properties是java.util里面的一个类,它是继承了Hashtable<Object,Object>,即就是一种Map形式的数据结构。其中有个load(is);方法可以让InputStream里面的数据转换为Properties数据。..原创 2022-04-14 16:04:36 · 1898 阅读 · 0 评论 -
MyBatis核心武器的源泉
一、前言 mybatis-config.xml是MyBatis的核心配置文件,相信学过MyBatis的都有印象,至于它的由来不是我们这里关心的重点。如果想解读MyBatis的话,mybatis-config.xml这个配置文件是必须理解的,因为它贯穿于整个MyBatis核心模块的始终。 它的核心标签就是<configuration>,configuration下面就是它的子标签,就是一种树结构。如下图所示:二、mybatis-config.xml的样例1、样例.....原创 2022-03-27 17:41:43 · 3133 阅读 · 5 评论 -
代码里面写上这几个单词你绝对不简单
一、MyBatis里面经常出现或者比较有意思的单词1、parse、parsing、parser、unresolved、Resolver解析2、handler、TokenHandler处理器、variables3、token、openToken、closeToken占位符4、parameterObject、ParameterMapping参数映射5、Element元素、delegate底层、eldestKey最老、target6、load加载、loadCompleted加载完成7、原创 2022-03-25 13:59:03 · 594 阅读 · 0 评论 -
MyBatis上刀山下火海的七虎上将之工厂方法模式
一、工厂方法模式1、多工厂模式架构图注意:绿色虚线箭头为实现关系、白色虚线箭头为依赖关系、平行四边形实线箭头为关联关系、蓝色实线箭头为继承关系。同时简单说明依赖和关联关系:在Java语言中,依赖关系体现为局域变量、方法的返回值/入参,或者对静态方法的调用等。而关联关系一般把关联的类作为自己的成员变量。2、工厂方法模式定义Define an interface for creating an object, but let subclasses decide which class t原创 2022-03-24 15:55:09 · 891 阅读 · 0 评论 -
MyBatis里面为什么老是实现HashMap重写get方法呢1
一、MyBatis的ContextMap实现HashMap重写get方法MetaObject封装用户入参parameterObjectMetaObject metaObject = configuration.newMetaObject(parameterObject);ContextMap封装MetaObject,间接就是封装了用户入参parameterObjectbindings = new ContextMap(metaObject, existsTypeHandler);为了方便理解原创 2022-03-22 10:40:26 · 1381 阅读 · 0 评论 -
关于super与this你知多少1
一、super调用父类的构造方法1、MyBatis的BaseBuilder/** * @author Clinton Begin */public abstract class BaseBuilder { protected final Configuration configuration; protected final TypeAliasRegistry typeAliasRegistry; protected final TypeHandlerRegistry typeH原创 2022-03-21 20:37:21 · 540 阅读 · 0 评论 -
MyBatis的ResultMapping链式调用老大说好样的
一、前言 这里啰嗦一下,实例方法就是没有static关键字的对象行为方法,有static关键字的就是静态方法可直接通过类名调用,构造方法就是与类名相同的方法, 上一篇文章《关于Java变量的类型权限选择与变量变更途径》我也提了链式调用,今天再次来聊聊这个链式调用。我们都知道类实例方法的调用,一般你得通过new获取对象实例,才能调用实例方法;同时我们也知道this关键字可表示对象实例。理解这些内容很关键的哦!!! 当你读懂这些代码,某一天派上用场时,项目大佬肯定在心里暗暗惊叹,哎......原创 2022-03-21 21:11:13 · 2766 阅读 · 0 评论 -
原来面试官经常问到的封装优化重构是这样子的1
一、前言 我们习惯于框架的接口与实现相分离的常见设计,即一个接口一个实现类这种模式,甚至有人连这种设计都不知道是怎么回事。再说了,那种一个接口多个实现类的我们也很少见啊!别,可能是设计能力没有那么的炉火纯青,有可能当你碰到的时候会忙得焦头烂额,连夜加班!!!这个行业,我们是需要不断汲取营养的,尤其是对源码阅读与理解,丰富自己的知识,扩展自己的视野,跟巨人说话,学以致用。今天还是以MyBatis源码为例,带你走进巨人的世界,领悟巨人的智慧,揭开MyBatis的神秘面纱。二、MyBatis接口层与..原创 2022-03-17 21:41:35 · 443 阅读 · 0 评论 -
关于Java变量的类型权限选择与变量变更途径
一、变量的类型在Java的编程语言里面数据变量类型有:基本数据类型、包装器数据类型,作用权限范围有:private、final、protecded、public。一般情况下能用基本数据类型就不用包装类型,作用权限一般是私有的,然后是final、protected、public的。尤其在大的项目里面这种原则需严格遵守,你才是一个合格的程序猿。不管是成员变量还是局部变量,都需要注意变量的使用权限。二、变量的变更有时我们需要在外部类对本类变量变更,那么本类就需要提供public权限的变更变量方法;有时原创 2022-03-17 17:14:37 · 523 阅读 · 0 评论 -
成员变量的作用
一、成员变量 在Java中让我们去区分变量的类型是件轻而易举的事情,无非就是成员变量作用域为整个类、局部变量作用域就是方法内部及变量所在处以下。我们常常忙于业务工作,知其然而不知其所以然。今天我们来聊聊成员变量个人理解的一些作用,希望能够对你有所帮助。二、成员变量的作用源码为例成员变量在源码里通常都是通过构造方法初始化(有时setter、直接初始化),变量顾名思义就是可变的量,个人认为成员变量的作用有:条件、数据装载(多见集合)、工具(辅助完成功能)、填充等等,当然有时它会充当多种作用。..原创 2022-03-16 15:42:40 · 1362 阅读 · 0 评论 -
Reflector、ReflectorFactory的今生
一、Reflector简介Reflector是Mybatis中反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射操作需要使用的类的元信息。ReflectorFactory接口主要是为了实现对Reflector对象的创建和缓存,Mybatis为ReflectorFactory接口提供了一个默认实现类DefaultReflectorFactory(如果想扩展实现ReflectorFactory接口即可),其中findForClass()方法实现会为指定的Class创建R原创 2022-02-23 20:59:51 · 602 阅读 · 0 评论 -
Reflector、ReflectorFactory的前世
一、如何获得Class对象1、Class.forName(“类的全限定名”)2、实例对象.getClass()3、类名.class (类字面常量)实验代码:@Slf4jpublic class ClassTest { public static void main(String[] args) throws ClassNotFoundException { // 1、获取class对象 Class childrenClass = Childr原创 2022-02-19 10:40:57 · 575 阅读 · 0 评论 -
TypeAliasRegistry别名注册机制
一、类的结构1、一个属性typeAliase,类型为Map<String, Class<?>>,用来维护别名与引用类之间的关系。2、TypeAliasRegistry()构造方法,构造函数里面注册Java的基本类型以及基本类型封装类添加了 别名,在Configuration配置类中直接被new的时候调用(具体点请看Configuration配置类源码)。3、resolveAlias(String string)解析类型别名泛型class。4、registerAli原创 2022-01-15 22:17:58 · 390 阅读 · 0 评论 -
MyBatis原来做的是这些事2
一、MyBatis模块组件1、回顾JDBC流程1.1、注册驱动1.2、获取连接1.3、创建Statement/Preparestatement1.4、executeQuery或executeUpdate执行查询/更新1.5、遍历ResultSet1.6、close释放资源2、MyBatis中SQL执行2.1、SqlSession接口层这就是面向接口编程,提供高层接口供外界访问。2.2、Executor执行器它将数据库的相关操作委托给Statement.原创 2021-12-31 21:22:11 · 852 阅读 · 0 评论 -
典型的架构设计1
一、Idea展示类结构图1、右击类选择如下:2、右击父类,Sow Implementions显示实现类二、StatementHandler下类的结构设计 1、StatementHandler是一个接口,它的职责是主要负责处理MyBatis与JDBC之间Statement的交互,通俗而言就是负责操作Statement对象与数据库之间的交互。在JDBC流程里面就是创建Statement或者PreparedStatement。2、面向接口编程,我们只关心操作,不关心实现细节。也就是..原创 2021-12-17 22:21:35 · 1790 阅读 · 2 评论 -
MyBatis原来做的是这些事
一、前言 在使用MyBatis之前,在学校的编程课里,我们最先接触的就是JDBC(Java Database Connectivity)Java数据库连接。二、1、注册驱动2、获取连接3、创建statement或preparestatement4、executeQuery或executeUpdate5、commit6、rollback7、close......原创 2021-12-19 18:25:48 · 1016 阅读 · 0 评论 -
MyBatis之数据源1
PoolState 为什么多出了个PoolState?我也想问问。个人觉得是经验的使然,写着写着,就蹦出来一个封装,不封一下就太压抑了。孰能生效,水到渠成。日积月累吧,单一职责吧,可维护可扩展吧。记一下,对于一些状态信息、统计信息、常量数据等考虑封一下。public class PoolState { protected PooledDataSource dataSource; // 空闲的连接 protected final List<PooledConnecti..原创 2021-10-09 23:09:57 · 244 阅读 · 0 评论