![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
mybatis基础包源码
mybatis基础包源码分析
飞翔的小羊
我宁愿瞄准星星却击不中他,也不愿没有目标。
我宁愿去追逐梦想却得不到它,也不愿不曾追逐。
我宁愿去尝试失败,不愿不曾尝试。
我不想活着的每一天,都在幻想如果我当初付出了更多努力会是怎样,我会去放手追逐,无论刀山、火海,我会去追逐我的命运,我不能朝着梦想行走,而是向它狂奔!
失败也是一种结晶、成果,也是一种成功
展开
-
mybatis源码reflection包--factory对象工厂子包
11原创 2021-01-03 14:55:49 · 221 阅读 · 1 评论 -
mybatis源码reflection包--invoker执行器子包
invoker子包是执行器子包,该包的类能基于反射实现对象方法的调用和对象属性的读写。 1.Invoker接口一共三个实现 顾名思义三个实现的作用依次是 对象属性的写操作、对象方法的操作、对象属性的读操作 2.Invoker接口 两个方法 (1)获取类型 (2)执行方法 看一下MethodInvoker实现中Type的含义, 通过分析构造方法, 在method的参数只有一个时 type是入参的类型,否则是方法返回值的类型 public class MethodInvoker imple..原创 2021-01-03 15:11:32 · 169 阅读 · 0 评论 -
mybatis源码reflection包--属性子包
reflection包下的property包是属性子包,该包中的类用来完成对象属性相关的操作。 1.该包下一共三个类 (1)PropertyCopier 提供对象属性复制功能。 以下代码是PropertyCopier对象copy的方法,通过反射获取需要copy类型的所有字段然后把源对像的值放到目标对象中,如果源对象有父类就继续复制父类的属性值 /** * 完成对象的输出拷贝 * @param type 对象的类型 * @param sourceBean 提供属性值的对象原创 2021-01-03 15:35:50 · 183 阅读 · 0 评论 -
mybatis源码reflection包--反射核心类reflector
Reflector是reflection包中最核心的一个类,负责对一个类的进行反射解析,并将解析后的结果存到属性中。 Reflector中的属性如下: // 要被反射解析的类 private final Class<?> type; // 能够读的属性列表,即有get方法的属性列表 private final String[] readablePropertyNames; // 能够写的属性列表,即有set方法的属性列表 private final String[] w原创 2021-01-03 16:55:45 · 200 阅读 · 1 评论 -
mybatis源码reflection包--参数解析器ParamNameResolver
ParamNameResolver是一个参数名解析器,负责把方法的参数按顺序解析出来并进行标注。 1.因为设计到字符串处理,随便写一个方法进行debug跟踪 ParamNameResolver在构造器中对getUserInfo进行解析,逻辑很简单,获取该方法所有参数类型进行遍历,如果该参数上有@Param注解就获取Param中的value作为属性名,没有的话就判断配置中useActualParamName是否允许使用原始参数名,不允许就用参数顺序进行命名。最后把解析结果存到ParamNameReso原创 2021-01-03 17:53:37 · 156 阅读 · 0 评论 -
mybatis源码reflection包--TypeParameterResolver泛型解析器
TypeParameterResolver是泛型参数解析器,他的作用是解析出一个方法返回值或字段的真正类型。举个栗子: 定义俩类: public class User<T> { public List<T> getInfo() { return null; } } public class Student extends User<Number> { } 请问调用Student类的getInfo方法输出的参数是啥?答案很eas.原创 2021-01-03 19:29:55 · 202 阅读 · 0 评论 -
mybatis源码parsing包--PropertyParser文档解析中的变量替换
mybatis中对占位符替换成实际的变量值用到的就是PropertyParser类。例如 select * from tb where id = #{id} 需要替换成 select * from tb where id = 123 PropertyParser的parse方法实际上使用了GenericTokenParser 的parser方法,下面分析下GenericTokenParser的parser方法 其中GenericTokenParser类中有如下三个属性 以 SELECT .原创 2021-01-03 20:45:49 · 408 阅读 · 0 评论