您的位置:首页 > 其它

mybatis-3.4.6工作原理介绍

2017-11-08 14:53 507 查看
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)

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: