Mybatis的源码解析

要想解析源码,我们首先要知道什么是Mybatis

一、Mybatis的介绍

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、代码解析

他的主要的代码有四行

        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlsessionfactor = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sqlsessionfactor.openSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

咋们一行一行的看

InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

这行代码的主要的作用就是将路径下的资源读取到流中

通过getResourceAsStream  读取资源文件 ,在读取的过程中 调用 classLoaderWrapper中的方法,然后通过对classLoader[]数组的遍历 ,然后进行判断 类加载器中所读的流是否为null,如果不为null 则返回InputStream对象

 SqlSessionFactory sqlsessionfactor = new SqlSessionFactoryBuilder().build(is);

来啦来啦,重头戏来啦,SqlsessionFactory是mybatis的 核心对象,获取核心对象的方式

SqlsessionFactoryBuilder构建  SqlsessionFactory 实例,通过Xpath解析的方式去解析mybatis-config.xml 文件 解析的文件内容套接到configuration中 而这个configuration 相当于 mybatis-config.xml 中的配置文件所对应的类。返回DefaultSqlSessionFactory对象。

SqlSession session = sqlsessionfactor.openSession();

获取SQLsession对象

通过DefaultSqlSessionFactory对象调用它里面opensession方法返回DefaultSQLSession对象

调用的是DefaultSqlSessionFactory类中opensessionFromDataSource

该方法下有三个参数 第一个执行器的类型  第二个 事务的隔离级别 第三个 是否自动提交

声明一个事务的对象,通过配置文件去读取环境标签的信息,然后通过环境去获取事务工厂对象,通过dataSource的配置获取事务的对象,再根据事务执行器的类型 去创建事务执行器 Executor(相当于Statement)通过执行器 事务自动提交以及配置文件对象 返回 DefaultSqlSession对象。

 UserMapper mapper = session.getMapper(UserMapper.class);

通过sqlsession获取相应Mapper

   第一层通过调用sqlsession中getMapper方法

   第二层通过调用配置中的getMapper方法

   第三层通过映射的注册器中的getMapper方法来进行获取相应的Mapper对象

其中使用了MapperProxyFactory 工厂对象来获取 MapperProxy 在里面使用反射和动态代理的方式来获取最终的mapper对象。

总结:

1、根据配置文件(全局,sql映射)初始化出Configuration对象
2、创建一个DefaultSqlSession对象,
它里面包含Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3、DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy;
4、MapperProxy里面有(DefaultSqlSession);
5、执行增删改查方法:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值