mybatis源码初探-----重新认识oop(一)

问题:为什么要重新认识oop?最近总是会发现这样的问题:(1)如何准确的命名一个对象?(2)如何把握系统结构

分析:对象是这样解释的:由一组属性和一系列的行为构成的一个基本单位

由此来看对象有两个重要特征:属性和行为

(1)针对于第一个问题,如何准确定义一个对象?生活中有一个经典例子

人(object)

姓名,性别,年龄.....(property)

吃饭,睡觉......(action)

对象 ‘人’ 有这么多属性,有这么多行为。反过来来说有这些行为属性特征的东西叫做 ‘人’

通常的,先有对象,再搜集属性和行为较为顺遂。但是总会遇到,根据一系列行为和属性去归纳总结创造对象这种情况,那么如何科学的归纳,如何命名将成为一个问题,因为我们将要创造新的词语并赋予它特定的含义。

举个例子

某对象

两栖动物,绿色(property)

跳(action)

归纳为 青蛙(object)

(2)如何把握分层结构,该怎么分层,如何分层

比如

男,女

大人,小孩

又比如mybatis执行流程

e1019582b335968fbd6c626f8accc7f45d4.jpg

那么我们如何科学把握这个分层标准

begin

1,引入jar包 mybatis和数据库驱动包

2,新建数据表

3,新建三个类,bean,dao,xml

4,test

如下

未看源码之前  当前来看 mybatis执行分为如下几步

1,加载数据库配置文件生成sqlSession

2,sqlSession加载dao类

3,执行dao类的方法

到此 产生以下问题

1,第三步dao类的方法执行后得到结果集。目前来看它和jdbc没有任何关系,它是如何和数据库交互的?

2,dao类是个接口,没有实现方法,它是如何 接口.方法 就能执行xml的sql语句?

3,它是如何自动关联bean的?

带着以上三个问题开始阅读源码

打开SqlSessionFactory

发现SqlSessionFactory是个接口,有两个实现类 DefaultSqlSessionFactory和SqlSessionManager

uml类图如下

回到使用的第一步

new SqlSessionFactoryBuilder().build(reader);

所以应当找到SqlSessionFactoryBuilder

打开SqlSessionFactoryBuilder

一路跟进来到了这个地方

实例化了XMLConfigBuilder一个并返回了DefaultSqlSessionFactory实例

因此

SqlSession sqlSession = sqlSessionFactory.openSession();
userDao interObject=sqlSession.getMapper(userDao.class);

执行的是DefaultSqlSessionFactory的行为

继续打开XMLConfigBuilder

发现XMLConfigBuilder继承自BaseBuilder

暂停一下,仔细观察XMLConfigBuilder继承自BaseBuilder,BaseBuilder有个参数为Configuration类型的构造方法,可是检查下子类没有Configuration类型的构造方法,而且编译器没有报错?wtf?发生了什么事?

验证一下这个想法

仔细阅读源码,发现

ok,从这里将get到至少两个知识点

1,父类若是有有参的构造方法,那么继承的子类必须显式 super一下,若父类若是没有参的构造方法,会隐式的super

2,

this这里是什么?我们知道 this.变量,this.函数,this代表的是对象,但是在这个地方很明显对象还未创建,那么它是什么?百度查到this也可以代表引用,那么就很好解释了,这里的this表示本类的引用,进入testA();又去引用testA(String name, String pass);按照这个猜想testA(),引用完仍会执行下面的代码。试一下

猜想正确

转载于:https://my.oschina.net/u/3188070/blog/1937309

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值