Mybatis框架分析

Mybatis框架分析


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

Mybatis是支持定制化SQL、存储过程和高级映射的持久型框架,主要完成两件事:

​ 1、封装JDBC的操作

​ 2、利用反射完成Java类和SQL之间的转换

Mybatis的主要目的就是管理执行SQL参数的输入和输出,编写SQL和结果集的映射是mybatis的主要优点


提示:以下是本篇文章正文内容,下面案例可供参考

一、在IDEA中关联 Mybatis源代码

1.把下载的框架源码jar包解压,得到一个文件夹
在这里插入图片描述

2.在IDEA中打开任意一个Mybatis框架的类,比如 Configuration
在这里插入图片描述
3.关联解压的源码目录
在这里插入图片描述
4.在代码中敲一下空格,设置源代码为可编辑(以便于写注释)
在这里插入图片描述

二、Mybatis的编程步骤

首先来让我们看看Mybatis的调用代码

代码如下(示例):

//加载配置文件
    InputStream inputStream = Resources.getResourceAsStream(mybatis-config.xml);
//初始化得到sqlSessionFacotry
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//得到SqlSession
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
//执行查询并返回结果
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      System.out.println(mapper.getAll());
    }

这里可以看见过程为:
加载配置文件 > SqlSessionFactoryBuilder > SqlSessionFactory > Sqlsession > Executor > statementHandler > ResultSetHandler > 返回结果

框架初始化

解析核心配置,赋值给configuration对象

代码如下(示例):

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
    //通过XMLConfigBuilder解析配置文件解析的配置相关信息都会封装为一个Configuration对象
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
     //这里可以看见build中返回的XMLConfigBuilder.parse()
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        inputStream.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }
try {
      //issue #117 read properties first
      propertiesElement(root.evalNode("properties"));
      Properties settings = settingsAsProperties(root.evalNode("settings"));
      loadCustomVfs(settings);
      loadCustomLogImpl(settings);
      typeAliasesElement(root.evalNode("typeAliases"));
      pluginElement(root.evalNode("plugins"));
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      reflectorFactoryElement(root.evalNode("reflectorFactory"));
      settingsElement(settings);
      // read it after objectFactory and objectWrapperFactory issue #631
      environmentsElement(root.evalNode("environments"));
      databaseIdProviderElement(root.evalNode("databaseIdProvider"));
      typeHandlerElement(root.evalNode("typeHandlers"));
      mapperElement(root.evalNode("mappers"));
    } catch (Exception e) {
      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }

扫描dao包,把mapper接口添加到注册表对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

映射数据类型

注册各种java->数据库的类型处理器
在这里插入图片描述注册各种基本类型的别名

在这里插入图片描述

创建SqlSession

创建Executor执行器,是Mybatis内的核心对象,负责执行SQL语句(总负责人)
Mybatis默认用的是Simple执行器这个实现类
在这里插入图片描述
在这里插入图片描述

调用Mapper接口的【抽象方法】完成SQL语句

有个HashMap封装了扫描到的Mapper接口(key)
在这里插入图片描述
获取XML中SQL语句节点名称、id、、parameterType、resultType或resultMap、
在这里插入图片描述
在这里插入图片描述

设置SQL参数

在这里插入图片描述

总结

1、加载核心配置文件到Configuration
2、构建SqlSessionFactory
3、打开SqlSession会话
4、Executor开始处理请求
5、SqlSource解析SQL语句
6、StatementHandler执行SQL语句
7、ParameterHandler设置参数
8、StatementHandler执行SQL语句
9、ResultSetHandler处理结果集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值