zoukankan      html  css  js  c++  java
  • Mybatis解析mapper

    众所周知,接口是不能被实例化的,但是日常开发中,我们经常能直接使用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中去

  • 相关阅读:
    20200503:对象头具体包括什么
    20200504:对象怎么定位
    [WC2006]水管局长
    [HNOI2010]弹飞绵羊
    [国家集训队]Tree II
    [SDOI2008]洞穴勘测
    [SDOI2011]染色
    [BZOJ2959]长跑
    LCT感性瞎扯
    [BZOJ4998]星球联盟
  • 原文地址:https://www.cnblogs.com/xmzJava/p/8759852.html
Copyright © 2011-2022 走看看