A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

梦想:秃头帮帮主

初级黑马

  • 黑马币:20

  • 帖子:7

  • 精华:0

© 梦想:秃头帮帮主 初级黑马   /  2018-11-18 11:45  /  1501 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梦想:秃头帮帮主 于 2018-11-18 15:00 编辑

自定义Mybatis步骤及分析:   ---xml方式
    1 删除pom.xml中的Mybatis的jar包
    2 创建那个测试类(入门案例)中每一个步骤需要用到的具体类(抽象类及实现类,由于时间关系,入门案例中mybatis执行步骤的分析就不在此处演示了)及方法    ==>大体框架已经建好,剩下的就是数据的获取与封装,和具体的功能实现了
    3 读取xml文件信息,(又要创建相应的类及属性方法),这个类为文件中的XMLConfigBulider类
    4 读取到的信息的封装类的创建  ==>使用特定方法进行解析封装(XMLConfigBuilder提供的三个方法,分别解析主配置文件,映射配置文件)新建Mapper类和Configuration类.Mapper类被作为属性传到Configuration中(所以Configuration的对象就有了所有的xml文件中的信息).
    注意:Mapper对象封装的是映射配置文件中的信息(一个Mapper对象封装一条sql语句,一个全限定类名;namespace),然后被上面所提到的特定方法封装到Map集合中(mappers)(因为一个映射配置文件在有多条sql语句)
    主配置文件中mapper标签对应一个映射配置文件,一个映射配置文件就可以封装一个mappers集合,如果主配置文件中有多个mapper标签,那么我们在封装多个映射配置文件的信息时就要注意了,在COnfiguration对象中封装mappers
    如果使用this.mappers = mappers;前面的就会把后面的覆盖这不就相当于主配置文件中只有一个mapper标签吗?    5 拿到封装信息后,开始实现前面创建的类和方法的功能.
    6 前面创建的都是接口,所以需要具体的实现类.
       而解析信息的封装对象Configuration cfg在各个实现类中的传播方式:
           首先cfg在构建者类SQLSessionFactoryBuilder中使用前面提到的XMLConfigBuilder中的第一个解析方法得到
           得到cfg对象之后调用构建者的build方法,在build方法中 return newDefaultSqlSessionFactory(cfg),在DefaultSqlSessionFactory实现类中用构造方法接收变成成员变量,.DefaultSqlSessionFactory对象调用openSession()方法以同样的方式将cfg传出去,一直传到SqlSession的实现类DefaultSqlSession中.而这个实现类干了两个很重要的事:创建代理对象,实现查询所有的功能
            而在创建代理类时,代理谁就要实现跟谁一样的接口(第二个参数传的是实现接口的字节码数组),而谁现在自己就是一个接口(IUserDao)
            所有直接传它自己就行了new Class[]{谁.class},(这么理解:因为我们只能实现谁了)
           SqlSession实现类的getMapper()方法中创建代理对象的第三个参数:
          new MapperProxy(cfg.getMappers()),   MapperProxy是Invocation的实现类.将mappers(封装的集合)传到MapperProxy中(构造方法接收),
          为什么一定要把mappers传到MapperProxy中:
          1 mappers中有我们需要的sql语句和全限定类名(查询到后的封装类型)
          2 我们肯定是在MapperProxy的重写方法invoke中实现增强的功能,要实现增强查询所有的功能必须调用selectList()方法,而sql语句和全限定类名是selectLIst()方法中所必要的信息.
         补充:mappers(封装的集合)连同主配置文件中的连接数据库的信息一起封装到了COnfiguration对象中.
         拿到mappers,我们就可以在invoke方法中进行增强了,selectList方法在util包下的Executor类中定义了.

day01_eesy_04mybatis_design.rar

32.89 KB, 下载次数: 79

需要用到的文件

1 个回复

倒序浏览
找组织:小弟愿从秃头帮基层干起,梦想早日能成为秃头帮帮主.
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马