第05篇:Mybatis的SQL执行流程分析

发布时间:2022-08-30 12:00


breadcrumb: false
navbar: true
sidebar: true
pageInfo: true
contributor: true
editLink: true
updateTime: true
prev: true
next: true
comment: true
footer: true
password: 111
backtotop: true
title: 第05篇:Mybatis的SQL执行流程分析

category: Mybatis

一、前言

前面我们知道了Mybatis是如何进行代理的, 但是最终 PlainMethodInvoker 中是如何将参数转组装成Sql,并执行处理Sql返回值的地方还都没看到。本篇我们就带着如下三个问题开始我们的探索吧。

第05篇:Mybatis的SQL执行流程分析_第1张图片

本篇内容因为涉及跟jdbc的知识,如果对这部分内容有点遗忘,请先JDBC知识复习,另本篇内容知识点较多,目录较复杂,建议根据文字结合
代码在实践的过程中一起学习。最好也可以自己debug一下。会收获更大。做好准备现在发车。

第05篇:Mybatis的SQL执行流程分析_第2张图片

二、流程分析

2.1 Sql是如何组装参数的?

第05篇:Mybatis的SQL执行流程分析_第3张图片

在组装参数之前我们先来提一个小问题,sql的类型是如何判断的。sql类型有增删该查。
除了查询会有结果集外,其他三种都是返回更新行数。他们对应的处理逻辑也是不一样的。
我们要先弄清这个问题。

2.1.1 sql类型如何判断?

我们知道sql的类型是可以通过关键字来判断的,如select/update/delete/insert。那么在Mybatis中哪里能输入sql呢?
一种有2种方式。

  1. 在Mapper.xml中直接编写sql,如下示例。



    
        delete from T_USER
        where token_id = #{tokenId,jdbcType=CHAR}
    
    
        insert into T_USER (token_id, uid, name)
        values (#{tokenId,jdbcType=CHAR}, #{uid,jdbcType=INTEGER}, #{name,jdbcType=CHAR})
    
    
        update T_USER
        set uid = #{uid,jdbcType=INTEGER},
        name = #{name,jdbcType=CHAR}
        where token_id = #{tokenId,jdbcType=CHAR}
    
    

  1. 在Mapper类中使用注解编写sql
public interface TUserMapper {
    @Select("select * from t_user where id = #{id}")
    TUser selectById(Long id);
}    

这些sql信息都保存在 MappedStatement。在PlainMethodInvoker通过SqlCommand进行调用。

  • line(9) 最终通过type = ms.getSqlCommandType() 获取sql的类型

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号