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

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

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

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

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

人(object)函数

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

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

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

一般的,先有对象,再搜集属性和行为较为顺遂。可是总会遇到,根据一系列行为和属性去概括总结创造对象这种状况,那么如何科学的概括,如何命名将成为一个问题,由于咱们将要创造新的词语并赋予它特定的含义。3d

举个例子xml

某对象

两栖动物,绿色(property)

跳(action)

概括为 青蛙(object)

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

好比

男,女

大人,小孩

又好比mybatis执行流程

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

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(),引用完仍会执行下面的代码。试一下

猜测正确

相关文章
相关标签/搜索