手写mybatis(二).实现映射器的注册和使用

本文知识要点:

1. 工厂模式的使用

2.泛型的使用

3.ClassScanner.scanPackage(packageName) 的使用,这个类是hutool 包下的一个类,这个方法功能是,将包下的文件扫描之后返回类的模版类型Class 的set 集合

4.Class 模板类的使用,包括方法 Class .isInterface() 判断是否是接口


situation: 

目前实现了简单的映射器Mapper代理工厂,主要作用是使用动态代理 ,将dao层的接口代理出来,以便调用处调用


task:

1.需要将dao层接口与mapper 映射器关联起来,需要创建一个注册器,来扫描包路径完成mapper 的注册

2.将 处理数据库,mapper相关的操作 封装在sqlsession里,并为sqlsession 提供一个工厂类


action:

1. 映射器注册器执行流程如下,图来自小傅哥的博客

步骤:

1.创建核心类注册器 MapperRegistry ,MapperRegistry 对外提供 addMappers(String packagePath)方法,该方法的功能是,根据入参的包路径,将该路径下的文件扫描,映射成具体的类对象,存储在MapperRegistry  的成员变量里 ,后续需要使用具体的mapper ,传入mapper类型,对应的在这个成员变量里查找并返回。


2.创建sqlsession,该类封装了查询数据库的一些列操作,如selectOne(),update(),getMapper() 等,


3. 创建sqlsession的工厂类SqlSessionFactory,负责sqlsession 实例的获取;


4. 编写 sqlsession 与 SqlSessionFactory 的实现类;


5. 编写测试用例:测试用例流程是:

   5.1 创建注册器 MapperRegistry 

   5.2 执行注册器addMappers方法

   5.3将指定路径下的Dao 接口代理类注册到注册器里

   5.4将注册器作为sqlsessionFactory 的构造器入参,创建sqlsessionFactory  对象,通过 这个工厂类获得sqlsession对象,这样这个sqlsession 对象就间接持有了Dao 接口代理类

   5.5获得映射器代理类对象,执行指定的方法



result:

见本文知识要点

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 环境: JDK1.8,Mysql5.7,maven3.6.1,IDEA 回顾: JDBC,Mysql,java基础...
    咕噜咕噜嗝阅读 1,855评论 0 0
  • Mybatis-9.28 环境: JDK1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JD...
    眼若繁星丶阅读 1,801评论 0 1
  • Mybatis-9.28 环境: JDK1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JD...
    友人Ay阅读 2,934评论 0 1
  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有...
    Mzr_e487阅读 2,985评论 0 1
  • 目录 1-3.持久层(名词,概念) 1-4.为啥需要Mybatis? 5、解决属性名和字段名不一致的问题 10-1...
    Java架构师顶顶阅读 5,271评论 0 0

友情链接更多精彩内容