问题:为何要从新认识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(),引用完仍会执行下面的代码。试一下
猜测正确