手写MyBatis ORM框架(二)

手写MyBatis ORM框架(二)

引言

在上一篇里我们学会了如何创建一个接口类的代理对象,并且完成对接口方法的调用处理。这个文章我们先来丰富一下我们的SqlSession,同时对映射器的注册提供注册机处理,满足用户可以在使用的时候提供一个包的路径即可完成扫描和注册。

开始

在这篇文章中,我要创建一个MapperRegistry扫描指定的包路径,把包路径下符合的接口,通通注册成MapperProxy,通通注册成一个代理类,并且把这些代理类写入到缓存之中,也就是一个map集合存放到MapperRegistry类之中,以后SqlSession去调用的时候,我们就不需要重新扫描了。

创建MapperRegistry类

在这里实现我们的添加 获取 Mapper 的方法,添加完成的放到我们本地的mapper之中。

当获取Mapper时,也是优先获取我们本地缓存的map中的MapperProxyFactory。

SqlSession标准定义和实现

在 SqlSession 中定义用来执行 SQL、获取映射器对象以及后续管理事务操作的标准接口。目前这个接口中对于数据库的操作仅仅只提供了 selectOne,后续还会有相应其他方法的定义。

在DefaultSqlSession中进行实现

创建SqlSessionFactory工厂

在工厂里面创建我们的SqlSession。

最后

关于对Mybatis源码的学习,参考了https://bugstack.cn/ 这个大佬的文章,我就是在这里学会的,同时这位大佬还分享了很多其他的知识,让我受益匪浅,大家可以点击去学习,十分感谢。

LICENSED UNDER CC BY-NC-SA 4.0