mybatis-3.4.6工作原理介绍

来源:互联网 发布:淘宝助理如何上传宝贝 编辑:程序博客网 时间:2024/05/20 05:08
1、Mybatis的主要组件包括:SqlSessionFactory、SqlSession、Mapper
   ①SqlSessionFactory是用来获取mybatis XML配置文件中的配置信息,将配置文件中的XML标记元素解析成对应的对象,比如Environment,以及创建SqlSession通过openSqlSession
   ②SqlSession是用来与数据库建立连接,并且操作Mapper进行基本的增删改查
   ③Mapper是用来对数据库进行增删改查等操作


2、Mybatis基本工作流程
   ①获取mybatis的配置文件,通过XMLConfigBuilder解析xml中的各元素,得到Configuration对象构造SqlSessionFactory对象,
   ②通过SqlSessionFactory获取SqlSession,与数据库建立会话连接
   ③通过SqlSession根据具体的Mapper接口类型获取具体的Mapper接口代理实现类,进行数据库的操作。
   

   
3、mapper的不同配置,mybatis是如何工作的?
   3.1.最常见的一种配置
    <mappers>        <mapper resource="org/apache/ibatis/autoconstructor/AutoConstructorMapper.xml"/>    </mappers>  
    工作流程:
    ①XMLConfigBuilder类通过mapperElement获取对应的元素标签,如果子元素标签是resource
    ②获取resource、url、class值
    ③如果resource!=null and url==null and class== null的话,XMLMapperBuilder.parse解析Mapper.xml,并将xml中解析到的namespace对应的Mapper接口放入到MapperRegisty
    ④MapperRegisty.addMapper(Class type)为每个Mapper接口对应一个new MapperProxyFactory<T>(type)用于生成代理实现类(JDK动态代理MapperProxy)
    ⑤resource==null and url!=null and class==null的话,会先从远程服务器获取到对应的xml配置文件的流,接下来的操作跟③④步一样
    ⑥resource==null and url==null anf class!=null的话直接,加载对应的class类,接下的步骤如④一样
    可以总结一下resource、url、class有且只能使用一个,如果同时存在两个或者三个直接抛出BuilderException异常
   
    3.2.如果Mapper.xml文件过多,你总不能一个一个的配置吧,那样岂不是很累,mybatis提供了通过package的方式解决此类问题
     <mappers>        <package name="org/apache/ibatis/autoconstructor"/>    </mappers>
    工作流程:
     ①XMLConfigBuilder类通过mapperElement获取对应的元素标签,如果元素标签是package
     ②获取name值(Mapper接口对应的包路径),获取包路径下的所有Mapper接口class类
     ③MapperRegisty.addMapper(Class type)为每个Mapper接口对应一个new MapperProxyFactory<T>(type)用于生成代理实现类(JDK动态代理MapperProxy)