mybatis的解析和运行原理(二)

前言:

上一篇章讲解了需要的技术简介,
先让我们来看看这一段代码

  InputStream is = Resources.getResourceAsStream("映射文件.xml");
  SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
  SqlSession session = factory.openSession();
  IUserDao userDao = session.getMapper(IUserDao.class);

第一句话就是将配置文件转换成流进行解析,这里我们不进行讨论,现在这一章节我们来分析一下mybatis中SqlSessionFactory的构建过程.

SqlSessionFactory的构建过程

SqlSessionFactory是一mybatis的核心类之一,最重要的一点就是它提供了创建mybatis的核心接口SqlSession,之后我们再来讨论SqlSession,mybatis是一个复杂的系统,我们采用构造模式去创建SqlSessionFactory,创建方式就是上文中的SqlSessionFactoryBuilder去构建,构建步骤分为两步.
第一步: 我们通过org.apache.ibatis.builder.xml.XMLConfigBuilder解析配置的XML文件,将读取的数据全部存入org.apache.ibatis.session.Configuration类中,这个时候所有的配置数据信息都存放在这个位置.Configuration这个类就类似于一个容器,它用来管理mybatis,后面会继续解释这个类,图像可以参考第一天的结构图
第二步: 使用Configuration对象去创建SqlSessionFactory.在mybatis中SqlSessionFactory是一个接口而并非一个实现类,虽然是接口但是我们并没有必要去实现它,mybatis为我们提供了一个默认的SqlSessionFactory的实现类org.apache.ibatis.session.defaults.DefaultSqlSessionFactory,一般情况我们都不会,也没有必要去创建一个类

一.构建Configuration

在SqlSessionFactory构建中,Configuration可以帮助我们:
1.解析配置文件
2,初始化基础配置,例如插件,映射器这些
3.提供单例,为后续创建SessionFactory服务提供配置参数
4.执行一些重要的对象方法.
Configuration通过XMLConfigBuilder去构建的,它是一个单例对象保管的信息分别是:
1.properties 全局参数
2.settings 设置
3.typeAliases 别名
4.typeHandler 类型处理器
5.ObjectFactory对象
6.plugin 插件
7.environment 环境
8.DatabaseIdProvider 数据库标识
9.Mapper 映射器

二.映射器的内部组成

映射器是mybatis的核心内容,一般而言是由三个部分组成:
1.MappedStatement: 它保存了映射器的一个节点.其中拥有我们配置的sql,sql的id,缓存信息,resultMap,parameterType,resultType,languageDriver等重要的配置内容.
2.SqlSource: 提供BoundSql对象,是MappedStatement的一个属性,可以理解为MVC中的控制器一样.
3.BoundSql: 它是建立SQL和参数的地方
在这里插入图片描述
反正结构图大概就是这样(电脑上没工具就用绘图随便弄了下),有兴趣的可以再去了解下这些结构图.我们继续来分析这三个部分.
因为MappedStatement对象涉及的东西较多,我们一般都不会去修改它,容易产生一些不必要的错误.而SqlSource是一个接口,它帮助我们根据参数和其他的规则组装SQL语句,这些都是很复杂的东西,但是好在mybatis本身已经帮助我们实现了它.我们主要注意力应该放在BoundSql上.
BoundSql 一个有3个主要属性分别是parameterMapper,parameterObject和sql.
先来说一下parameterObject这个,parameterObject就是参数本身,可以传递基本数据类型,比如我们传一个int类型时,mybatis会把参数变成Integer对象进行传递.也可以直接传递引用数据类型,但是需要注意的是我们在传多个参数的时候要使用@parm注解修饰参数,不然他会默认把参数变为一个Map<String,Object>对象,其键值关系是按顺序来规划的.
parameterMapper,是一个List,它的每一个元素就是parameterMapper的对象,这个对象会描述我们的参数.参数包括属性,名称,表达式,javaType等等重要信息.
sql就是我们书写在映射器里的一条SQL语句,一般不需要改写,只有在我们使用插件的时候我们才会根据需求进行改写.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值