理解Mybatis如何解析mapper文件
最编程
2024-08-04 18:43:48
...
众所周知,接口是不能被实例化的,但是日常开发中,我们经常能直接使用dao层对象的方法,这又是为什么呢。
带着这些问题,我们看下mybatis内部做了那些操作。
Mapper解析
上文我们描述了mybatis会解析xml配置文件,将xml各个节点解析到Configuration中,其中的映射器解析就是解析xml中每条sql
看下映射器的解析
再看看bindMapperForNamespace,将namespace即dao接口反射成一个class
addMapper方法里我们看到了mapperRegisty,这是映射器注册机
MapperProxyFactory映射器代理工厂,用于生产代理类。
以上过程都发生在mapper解析中,mybatis只是将各个接口存到一个mapper,还没有做出代理。接下来我们看下具体调用dao层接口时的操作
SqlSession sqlSession = sqlSessionFactory.openSession(); try { OrderMapper OrderMapper = sqlSession.getMapper(OrderMapper.class); List<Order> ordertList = OrderMapper.selectProductList(); for (Order order : ordertList) { System.out.printf(order.toString()); } } finally { sqlSession.close(); }
最终还是到了mapperRegisty
JDK动态代理生产代理类
MapperProxy,每一次的方法调用都会到invoke中去
推荐阅读
-
如何使用rsync命令跳过特定的文件和文件夹?(exclude-from选项解析)
-
全面解析:如何在XCP 3.2中使用CANape创建并导入A2L文件?
-
理解XCP:如何在ASAP2中创建新的A2L文件?
-
全面解析:在CANape中如何创建新的A2L文件(步骤3.4)
-
理解并解析A2L头文件(以CCP协议为例)
-
理解Mybatis如何解析mapper文件
-
理解并解析VCF文件的参数
-
理解并解析VBAProject 00文件
-
如何在 VS Code 中设置调试参数:理解 launch.json 配置详情、利用 task.json 替换变量、开启自动保存与代码格式化、处理空格与制表符、探索函数调用链、掌握文件查找与全站搜索技巧
-
在C++里,如何使用并理解sort函数及相关头文件指南