MyBatis源码系列
文章平均质量分 80
MyBatis源码系列主要介绍MyBatis的优良设计,源码解读,可以从中学到什么,为什么这么设计。面对的读者可以是Java初学者、Java中级、Java高级程序员等。也会涉及设计模式的讲解,罗列设计模式的多种用法等。
卡布奇诺-海晨
《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。有研究MyBatis的经验,设计模式,基本算法,也有相关的博文输出。未来时间允许情况下,推出更多的关于框架源码的知识以及结合工作经验的沉淀。程序员这条路一开始走对了后面就轻松些,作为过来人,有经验感受在博文透露。程序员这条路最好有个引路人,每个人都可以努力,但是方向不对努力白费。某音有视频教程(某马/某千等都是上万价格)
展开
-
关于抖音年前活动的需求与思考
支付宝有年前活动,活动上面也有类似的需求,但是我们更加乐意玩抖音的,赚的零花钱可不小。但是这些活动都是有目的的,比如增加吸引注册用户、完成打广告等。当然虽然说是年前活动,但是平时的活动也是有类似的设计的,许许多多的应用软件都会利用类似的活动去完成相应的目的。所以笔者在这里分享一下,希望对大家有帮助。当然活动越丰富,需求就越多、功能越复杂等,对需求分析师、架构师、编码工程师、测试组等都是一个不小的挑战。而这些活动可能不仅仅是举办一次,甚至每次的需求可能有所不同。如何设计出一个具备安全的、稳定的、高可用的原创 2023-01-11 21:06:46 · 773 阅读 · 4 评论 -
MyBatis源码第13章之抽象父类
抽象类可能日常开发有些人基本不用,但是没怎么用的话也得不能忘了其中的用意。抽象类在源码的框架里面俯拾即是,抽象类与接口的结合碰撞出别样的火花。我们在学习的过程中或者开发的过程中,多多少少都知道父类与子类的关系,但是可能会很少真正认识到如何去使用这些关系。今天就来个大总结,揭秘抽象父类与子类的神秘面纱。...原创 2022-07-17 18:32:05 · 360 阅读 · 2 评论 -
MyBatis源码第12章之缓存模块
数据库的资源是珍贵的,我们要充分利用以及减少对数据库的直接访问,提高系统的性能。缓存就是用来解决一些系统性能瓶颈的,充分发挥缓存的功能,使得系统高可用。前面介绍了装饰器模式与JDK动态代理,其实并不是与之没有联系的,都是为了为后面埋下伏笔。MyBatis的缓存模块就是使用了装饰器模式去实现相关功能的,不过它类图就简单些,没有抽象装饰器,都是具体装饰器。那么MyBatis到底是怎么实现缓存功能的呢,这给我们的日常开发带来哪些启发?...原创 2022-07-16 20:12:55 · 335 阅读 · 1 评论 -
MyBatis源码第11章之装饰模式与动态代理
Proxy生成的代理类是不处理逻辑的,抽象又很真实你连代理类体都没看到如何写逻辑,但是它会委派给调用处理器的invoke()方法处理逻辑,这也就是为什么多了个InvocationHandler接口及其实现类的原因。我们都知道,要调用一个类的非静态方法,一般都得经过它的实例去调用方法。好办,Proxy生成的代理类不处理逻辑,而委托给调用处理器的invoke()方法处理,那么要调用调用处理器的方法,你至少要拿到它的实例。故Proxy的newProxyInstance()方法(这个方法是开发中经常用到的)中就得把原创 2022-07-16 19:23:24 · 378 阅读 · 0 评论 -
MyBatis源码第10章之加载配置
mybatis-config.xml是MyBatis的核心配置文件,相信学过MyBatis的都有印象,至于它的由来不是我们这里关心的重点。如果想解读MyBatis的话,mybatis-config.xml这个配置文件是必须理解的,因为它贯穿于整个MyBatis核心模块的始终。...原创 2022-07-15 20:40:25 · 440 阅读 · 1 评论 -
MyBatis源码第9章之继承HashMap并重写方法
DynamicContext(在scripting.xmltags包)里面封装了静态内部类ContextMap,并且ContextMap作为DynamicContext的成员变量bindings,用于封装用户入参parameterObject的。在《成员变量的作用》一节有讲到,bindings成员变量这里装载数据作用,关于存数据这里DynamicContext封装了bind()方法; 其实MyBatis是有着它自己的灵魂的,我们日常开发当中,也要有着自己的一些东西才具备一定的内涵。...原创 2022-07-14 20:50:46 · 483 阅读 · 0 评论 -
MyBatis源码第8章之反射
MetaObject感觉熟悉又陌生,第一给你感觉是不是跟Java的Object有点像,但是为什么又不一样?是的,它们的确是相似,却有着不一样的内容,但是它们还是有些共同的地方就是通用性。传统Java提供的Object是所有类的父类,即所有类的类型都可以是Object类型。但是你无法直接使用Object去获取和设置值,一般需要将Object转回原来的类型,才可以set/get值。想想看,这么多类型,如果是使用Object的话,你是不是要做很多强制转换,而且你也不知道有哪些类,证明不可取。那这个通用性怎么解决.原创 2022-07-14 19:05:34 · 271 阅读 · 0 评论 -
MyBatis源码第7章之反射
MetaClass是MyBatis对对象级别的元信息的封装和处理,下面来看看MyBatis是如何对对象级别的元信息的处理。前面一章的用意就是为后面涉及接口及其实现类的一些关系的总体梳理,在实际开发中也会经常用到的,读者一定要好好地研究研究,多去做做试验。本节针对的是对象级别的封装处理,重点接口ObjectWrapper及其实现类,抽象类BaseWrapper、BeanWrapper、MapWrapper、CollectionWrapper。......原创 2022-07-13 21:01:15 · 386 阅读 · 2 评论 -
MyBatis源码第6章之接口及其实现类
接口及其实现类,这种关系大多数开发者多多少少还是知道的。但是面对一个接口多个实现类的设计及其应用,相信绝大多数的开发者还是手足无措的。接口以及抽象类的概念在这里不哆嗦,基础知识务必扎实,才不会在源码的世界里面总是走迷宫。而MyBatis源码里面就有不少关于接口及其实现类的良好设计,在这里笔者罗列一些设计供大家学习参考参考。......原创 2022-07-13 19:35:29 · 249 阅读 · 0 评论 -
MyBatis源码第5章之反射
前面的章节已经介绍了他们俩,这里就不多说了。reflectorFactory就是反射工厂,根据type用于创建reflector对象的。reflector前面介绍了它封装了Java级别的类的信息,并且扩展了相应的功能,可以理解为Java升级级别的处理服务。而MetaClass是MyBatis级别的,与Java中反射相关类存在关联关系,耦合度比较低。.........原创 2022-07-12 18:38:03 · 399 阅读 · 1 评论 -
MyBatis源码第4章之反射
在MyBatis3.5.5版本源码中,前面两个方法没怎么用。我们重点看第3个接口方法,为type(Class类型)创建reflector对象。这里是不是有大大的疑问,直接new不香么?是的,直接new的话会造成资源浪费。reflector实际只是数据的中转站,并不是数据的组成部分和决定成分。这里为什么提供工厂方法模式创建Reflector,下面将更有说服力的论证。......原创 2022-07-10 19:26:52 · 278 阅读 · 1 评论 -
MyBatis源码第3章之反射
Reflector是Mybatis中反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射操作需要使用的类的元信息。ReflectorFactory接口主要是为了实现对Reflector对象的创建和缓存,Mybatis为ReflectorFactory接口提供了一个默认实现类DefaultReflectorFactory(如果想扩展实现ReflectorFactory接口即可),其中findForClass()方法实现会为指定的Class创建Reflector对象.....原创 2022-07-10 15:37:41 · 212 阅读 · 0 评论 -
MyBatis源码第2章之反射
getFields()获得某个类的所有的公共(public)的字段,包括继承自父类的所有公共字段。 类似的还有getMethods和getConstructors。原创 2022-07-10 11:24:17 · 228 阅读 · 0 评论 -
MyBatis源码第1章开篇
Mybatis 是一个半 ORM( 对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身, 不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能, 灵活度高。......原创 2022-07-10 10:41:38 · 321 阅读 · 0 评论