本文知识要点:
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:
见本文知识要点