美文网首页
Mybatis源码解析-主要工作流程分析

Mybatis源码解析-主要工作流程分析

作者: java自力更生 | 来源:发表于2021-12-15 12:30 被阅读0次

    前言

    在阅读本系列文章之前,确保读者已经对Mybatis的基本使用有所掌握。
    在阅读源码过程中,初学者往往忽略了框架的主要工作流程,而专注于细节实现,很容易迷失方向,所以,在源码解析之前,首先要了解框架主要做了什么事情。

    步骤拆解,相应的源码解析将会在后面章节说明

    1.解析Xml文件,读取对应的statement、resultMap、namespace等信息。

    内部通过XMLMapperBuilder类实现该功能。

    2.为标注有Mapper注解的接口生成代理对象MapperProxy。

    内部通过为各个Mapper接口生成MapperFactoryBean对象注入Spring容器,而MapperFactoryBean对象实现了FactoryBean接口,需要读者首先了解FactoryBean的作用于用法。

    3.根据调用的Mapper方法和入参,匹配相应的statement,进行sql拼接,调用executor执行。

    内部通过动态代理、Executor的实现类实现。我们来看一下未使用Mybatis框架的代码实现:

    // 获取链接
    connection = DriverManager.getConnection(url, username, password);
    
    // 创建statement
    preparedStatement = connection.prepareStatement("select * from t_person where id = ?");
    preparedStatement.setLong(1, id);
    
    // 执行
    resultSet = preparedStatement.executeQuery();            
    

    4.遍历结果,将Mysql中的数据对象转换成Java对象。

    内部通过反射和TypeHandler实现。我们来看一下未使用Mybatis框架的代码实现:

    // 遍历结果集
        Person person = null;
        while (resultSet.next()) {
            Long realId = resultSet.getLong("id");
            String name = resultSet.getString("name");
            String mobile = resultSet.getString("mobile");
            int age = resultSet.getInt("age");
            Date createAt = resultSet.getDate("create_at");
            Date updateAt = resultSet.getDate("update_at");
            person = new Person();
            person.setId(realId);
            person.setName(name);
            person.setMobile(mobile);
            person.setAge(age);
            person.setCreateAt(createAt);
            person.setUpdateAt(updateAt);
        }
        return person;
    

    总结

    Mybatis框架分离了sql语句执行与业务逻辑实现,减少与数据库相关的操作,让开发者能够专注于业务代码开发。

    相关文章

      网友评论

          本文标题:Mybatis源码解析-主要工作流程分析

          本文链接:https://www.haomeiwen.com/subject/obzufrtx.html