手写Mybatis

Mybatis的核心就是动态sql以及通过jdk的动态代理注入



完整代码可以查看我的

GitHub



Jdk的动态代理仅仅需要接口就能生成子类

我们需要写一个InvocationHandler,然后重写invoke方法

Mybatis的工作流程和Spring差不多,详情参考这个链接

需要扫描类,然后对加了注解的接口放到容器里

然后通过容器里的接口生成代理类放到容器里

然后遍历调用了Mapper的类,对字段进行注入

与Spring 不同的地方就是方法返回值的处理

我们在InvocationHandler的invoke方法中通过上面的sql注解以及返回值来得到结果并返回



我们先判断方法是否加了Select注解

    然后获得上面的sql语句

     然后获得datasource(之前就从配置类中得到了)

        然后得到resultSet 

        然后判断方法返回值是否是List

            如果是List就获得泛型里面的类型,然后通过写的一个类来获得List数据


我们来看看ListHandler中写了什么




ListHandler中的handle方法遍历了resultset,然后调用了beanhandler的convertToBean方法

convertToBean方法浅显易懂,就是通过反射设置值,然后返回对象




完整代码可以查看我的

GitHub



猜你喜欢

转载自blog.csdn.net/u011546032/article/details/80808884