【笔记】第一阶段 模块一 :自定义持久层框架

任务一:自定义持久层框架

1. JDBC回顾及问题分析

JDBC问题分析:

2.持久层框架思路分析

使用端:(项目)引入自定义持久层框架的jar包

             提供两部分配置信息:数据库配置信息、SQL配置信息(SQL语句、参数类型、返回值类型)

             sqlMapConfig.xml:存放数据库配置信息

              mapper.xml:存放sql配置信息

自定义框架层本身:(工程)本质就是对JDBC代码进行封装

(1)加载配置文件:根据配置文件路径,加载配置文件成字节输入流,存储在内存中

           创建Resource类,方法:InputStream getResourceAsStream(String path)

(2)创建两个JavaBean(容器对象),存放的就是配置文件解析出来的内容

           Configuration:核心配置类,存放sqlMapConfig.xml解析出来的内容

           MapperStatement:映射配置类,存放mapper.xml解析出来的内容

(3)解析配置文件:dom4j

           创建类:SqlSessionFactoryBuilder包含方法build(InputStream in)主要做两件事:

                      第一: 使用dom4j解析配置文件,将解析出来的内容封装到容器对象中

                      第二 创建sqlSessionFactory对象,生产SqlSession,这里用到了工厂模式,降低程序间的耦合

(4)创建SqlSessionFactory接口及实现类DefaultSqlSessionFactory,方法openSession()用以生产sqlSession

(5)创建SqlSession接口及实现类DefaultSession,定义对数据库的CRUD操作(selectList、selectOne、update……)

(6)创建Executor接口及实现类SimpleExecutor实现类,query(Configuration,MapperStatement,MapperStatement,Object... params)方法,执        行的就是JDBC代码

3.IPersistence_Test编写

IPersistence_Test可以认为是使用端,首先完成使用端编写

两类配置文件:

sqlMapConfig.xml : 写数据库连接相关的配置信息

XXXMapper.xml : (比如UserMapper.xml) 写特定模块(比如用户模块)的语句信息

XXXMapper.xml中主要完成以下功能:

    1.配置真正需要在MySql里面执行的sql语句

   2.实现特定语句的定位,也就是需要给sql一个特定标识,即statementId

  3.指定返回结果的封装类型

  4.指定传入参数的类型

     如图,xml配置如下,namespace和id组成唯一标识


       sqlMapConfig.xml如下:

            为了Resource加载xml文件时只加载一次,就需要把mapper.xml也存放进来,因此需要mapper.xml的全路径


4.Resource类定义

       Resources类里面定义一个方法,目的是将配置文件加载成字节输入流,存储在内存中


5.容器对象定义

         容器对象:MapperStatement和Configuration,这两个容器对象存放的就是配置文件解析出来的内容

         MapperStatement作用是从xxxMapper里面读取内容,所以xxxMapper的各个属性都需要被存储在MapperStatement对应的类属性

        Configuration作用是存放的就是sqlMapConfig的内容,其实就是数据库配置信息

6.解析核心配置文件sqlMapConfig以及映射配置文件mapper.xml

        解析配置文件:

        创建类:SqlSessionFactoryBuilder包含方法build(InputStream in)主要做两件事:

                  (1) 使用dom4j解析配置文件,将解析出来的内容封装到对象Configuration中,这里会自定义一个XMLconfigBuilder类,用于解析封装

                  (2) 创建sqlSessionFactory对象,生产SqlSession,即会话对象(增删改查都封装在这里),这里用到了工厂模式,降低程序耦合

                  

7.会话对象sqlSession类定义以及会话对象sqlSession方法定义

          sqlSessionFactory 接口及D efaultSqlSessionFactory 实现类


            sqlSession 接口及 DefaultSqlSession 实现类,如图,以selectList(),首先初始化Executor对象,然后获取Comfiguration里面存的                 xxxMapper.xml转换后的MapperStatement,最后执行执行Executor的query方法


8.查询对象query方法定义

    Query方法一共需要六步

        1 注册驱动,获取连接

        2 getBoundSql获取sql语句,然后转换sql语句,此时需要配置标记解析器来对占位符的解析处理工作,这里直接用了从Mybatis拿的代码为工具类使用

        3 获取预处理对象:preparedStatement

        4 设置参数

        5 执行sql

        6 封装返回结果集

9.getMapper方法实现

     由于Dao层加载配置文件、获取SqlSessionFactory、生产sqlSession对象存在代码重复.且statementId有硬编码的问题,可以不要Dao的实   现 类,使用代理模式实现Dao层接口的代理实现类 

     tips:由于invoke方法中是没有办法获取statementId的,但是可以通过接口全限定名.方法名即namespace.id,因此xxxMapper.xml文件的规范        要遵守,namespace要和接口全限定名一致,方法名也要和接口方法名一致

10.大体流程如下图


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容