Mybatis源码分析

        MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。那么,MyBatis底层源码到底时什么样的结构呢?

首先,mybatis的实现主要依赖于以下四句代码:

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

我们接下来逐句进行分析:

1.Resources资源工具类

这里我们通过Resources资源工具类,通过getResourceAsStream读取参数列表中的资源文件,在读取过程中,调classloaderWrapper,然后通过对classLoader[]数组的遍历 然后进行判断 类加载器中所读的流是否为null如果不为null 则返回InputStream对象。

2.SqlsessionFactory获取核心对象

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

3.获取SqlSession对象

要获取SqlSession对象,通过DefaultSqlSessionFactory对象调用它里面opensession方法返回DefaultSQLSession对象,调用的是DefaultSqlSessionFactory类中opensessionFromDataSource。声明一个事务的对象,通过配置文件去读取环境标签的信息,然后通过环境去获取事务工厂对象,通过dataSource的配置获取事务的对象,再根据事务执行器的类型 去创建事务执行器 Executor(相当于Statement)通过执行器 事务自动提交以及配置文件对象 返回 DefaultSqlSession对象。

4、通过sqlsession获取相应Mapper

第一层通过调用sqlsession中getMapper方法,第二层通过调用配置中的getMapper方法,第三层通过映射的注册器中的getMapper方法来进行获取相应的Mapper对象其中使用了MapperProxyFactory 工厂对象来获取 MapperProxy 在里面使用反射和动态代理的方式来获取最终的mapper对象。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值