iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java MyBatis是怎么执行一条SQL语句的
  • 499
分享到

Java MyBatis是怎么执行一条SQL语句的

2023-07-02 15:07:21 499人浏览 安东尼
摘要

今天小编给大家分享一下Java mybatis是怎么执行一条sql语句的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下

今天小编给大家分享一下Java mybatis是怎么执行一条sql语句的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    阅读环境

    源码环境,GitHub直接下载的main分支代码,版本号为 3.5.11-SNAPSHOT

    Ide Jetbrain idea 2021.2.1 社区版
    Maven 3.8.2
    jdk 17

    配置文件:

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "Http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>  <environments default="development">    <environment id="development">      <transactionManager type="JDBC"/>      <dataSource type="POOLED">        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>        <property name="url" value="jdbc:Mysql:/**"/>        <property name="username" value="****"/>        <property name="passWord" value="******"/>      </dataSource>    </environment>  </environments>  <mappers>    <mapper resource="LoGChartMapper.xml"/>  </mappers></configuration>

    测试主方法:

    public class Main {  public static void main(String[] args) throws IOException {    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);    SqlSession sqlSession = build.openSession();    LogChartMapper mapper = sqlSession.getMapper(LogChartMapper.class);    List<LogChart> logCharts = mapper.selectList();    System.out.println(JSONUtil.tojsonStr(logCharts));  }}

    mapper

    public interface LogChartMapper {  @Select(value = "select * from log_chart")  List<LogChart> selectList();}

    mapper.xml

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.mybatis.test.mapper.LogChartMapper"></mapper>

    阅读过程

    加载XML的过程

    从上方的测试主方法可以看到,比较重要的是 SqlSessionFactory,第一步需要看的就是他是被如何构建出来的,点击build方法,跟进去。

    Java MyBatis是怎么执行一条SQL语句的

    Build方法追到最下面,构建了一个XMLConfigBuilder,那么这个Parser方法,有必要进去看一下。

    Java MyBatis是怎么执行一条SQL语句的

    这段代码比较简短,可以看到两个信息点。第一个返回的类型是Configuration类,调用了一个parseConfiguration方法,并且传入的configuration的xml节点。
    说明方法进入是对的,后续我们继续跟一下 parseConfiguration方法

    Java MyBatis是怎么执行一条SQL语句的

    针对这个方法,看到几个眼熟的东西。分别是解析 plugins、objectFactory、mappers 这些标签的。其他的我们这里不关心,我们主要看一下处理 Mappers 标签的这个方法。

    Java MyBatis是怎么执行一条SQL语句的

    这里通过遍历我们写的每个mapper标签,会得到resource、url、mapperClass这三个变量。他们在配置时是互斥的。 这里的三个if,也对应了每个不为空的情况。

    我们的XML使用的是Resources属性,可以回到上面翻XML,我们这里看Resource标签不为空的 if 判断即可。

    Java MyBatis是怎么执行一条SQL语句的

    这里注意看,Myabtis去读取了Mapper指向的xml,然后new了一个XmlMapperBuilder,随后调用了parse方法,这里的逻辑和刚刚开头的地方很相似。值得注意的是在创建XmlMapperBuilder的时候吧Configuration传了进去,也就是说在parse中是会改变这个configuration里面的东西的。到这里接着往里面跟代码。

    Java MyBatis是怎么执行一条SQL语句的

    看名字有两个比较重要的方法,ConfigurationElement、binMapperForNameScpace。
    configurationElement 看这个方法的入参,大概率是对XML做一些处理,像ResultMap、sql、select这些标签做处理,我这里没有用到就不说了,感兴趣的可以自己阅读一下。

    后面主要看一下BindMapperForNameSpace方法。

    创建Mapper

    Java MyBatis是怎么执行一条SQL语句的

    上面的代码中,看到了AddMapper这个方法,传入的值,是刚刚xml中配置的nameSpace,也就是Mapper类的完整类名,追进去看一下。

    Java MyBatis是怎么执行一条SQL语句的

    看到这里,知道了一个知识点,为什么Mapper类一定要是 Interface,如果不是interface,这个方法就进不来了。

    注意看了,有一个细节,向knownMappers中,以这个class为键,放入了一个MapperProxyFactory。到达这里,就可以得知。所有的Mapper方法,都是由代理类去调用的。

    接下来往下,又看到一个相似的,parse方法,看他的类名 MapperAnnotationBuilder 是用来处理注解的,往里追看一下。

    Java MyBatis是怎么执行一条SQL语句的

    这里的圈出来的 IF 判断,判断方法上有Select 或者 SelectProvider注解,并且没有ResultMap注解的。会去解析ResultMap,这里大概率是根据返回值,去遍历属性这里就跳过了,进入下一个方法。

    parseStatement方法像是去解析方法了,代码有点多,这里就不粘贴了,感兴趣可以自己看一下,知道这里是去解析方法就可以了。

    到这里结束,最后返回了SqlSessionFactory类。

    获得一个Mapper

    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();LogChartMapper mapper = sqlSession.getMapper(LogChartMapper.class);

    Java MyBatis是怎么执行一条SQL语句的

    knownMapper 这个对象很眼熟是不是,这个在上面有提到过,以Class为Key,value时MapperProxyFactory,所以这里可以Get出来一个工厂,然后点用了newInstance方法,追进去看一下。

    Java MyBatis是怎么执行一条SQL语句的

    这里看到是Java原生的动态代理,这里返回的是一个代理对象。

    执行一个Mapper的方法

    因为看到这里时Java的动态代理,所以也很显而易见的得知。MapperProxy实现了InvocationHandler接口。

    Java MyBatis是怎么执行一条SQL语句的

    实现这个接口,会重写Invoke方法。也就是说,我们虽然代码上写的是调用的我们Mapper中指向的方法,但是其实JVM会去调用这个invoke方法,接下来直接去追Invoke方法。

    Java MyBatis是怎么执行一条SQL语句的

    由于我们mapper是接口,所以上面的if是为false的,也就是else是我们执行的代码,接着往里追。

    Java MyBatis是怎么执行一条SQL语句的

    这里可以看到new了一个PlainMethodInvoker,然后调用他的invoke方法,追进来。

    Java MyBatis是怎么执行一条SQL语句的

    接下来这个Execute就是他的具体执行Select语句的地方了。

    Java MyBatis是怎么执行一条SQL语句的

    Java MyBatis是怎么执行一条SQL语句的

    由于后面的代码有点长,我这里就摘取了一小段关键的地方。看一下即可。

    以上就是“Java MyBatis是怎么执行一条SQL语句的”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Java MyBatis是怎么执行一条SQL语句的

    本文链接: https://www.lsjlt.com/news/342775.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java MyBatis是怎么执行一条SQL语句的
      今天小编给大家分享一下Java MyBatis是怎么执行一条SQL语句的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
      99+
      2023-07-02
    • Java MyBatis是如何执行一条SQL语句的
      目录背景阅读环境阅读过程加载XML的过程创建Mapper获得一个Mapper执行一个Mapper的方法结论背景 在前两天的一次面试中,面试官问了一个和标题一样的问题,由于一直认为My...
      99+
      2024-04-02
    • 浅谈MyBatis 如何执行一条 SQL语句
      目录前言 基础组件 工作流程 初步使用 详细流程 获取 MapperProxy 对象 缓存执行方法 构造参数 获取需要执行的 SQL 对象 执行 SQL 语句 总结 前言 Myba...
      99+
      2024-04-02
    • MyBatis中SQL语句是怎么执行的
      MyBatis中的SQL语句执行流程大致如下: 配置文件:首先在配置文件(通常是mybatis-config.xml)中配置数据...
      99+
      2024-04-23
      MyBatis
    • 怎么执行一条SQL更新语句
      这篇文章给大家分享的是有关怎么执行一条SQL更新语句的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模...
      99+
      2024-04-02
    • 一条SQL语句执行过程
      目录一、MySQL 体系架构- 连接池组件- 缓存组件- 分析器- 优化器- 执行器二、写操作执行过程三、读操作执行过程四、SQL执行顺序一、MySQL 体系架构 - 连接池组件 ...
      99+
      2024-04-02
    • 一条SQL语句在MySQL中怎么执行的
      小编给大家分享一下一条SQL语句在MySQL中怎么执行的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一 MySQL 基础架构分...
      99+
      2024-04-02
    • MyBatis中怎么执行SQL语句
      在MyBatis中执行SQL语句可以通过Mapper接口和映射文件来实现。以下是一般步骤: 1、创建Mapper接口:在Mapper...
      99+
      2024-03-07
      MyBatis
    • 怎么在MyBatis中执行SQL语句
      这期内容当中小编将会给大家带来有关怎么在MyBatis中执行SQL语句,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基础组件我们要理解 Mybatis 的执行过程,就必须先了解 Mybatis 中都有哪一...
      99+
      2023-06-15
    • 一条SQL语句执行过程时怎样的
      本篇内容主要讲解“一条SQL语句执行过程时怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一条SQL语句执行过程时怎样的”吧!一、MySQL 体系架构- 连接池组件负责与客户端的通信,是半双...
      99+
      2023-06-29
    • 一条SQL更新语句的执行过程是什么
      这篇“一条SQL更新语句的执行过程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“一条SQL更新语句的执行过程是什么”文...
      99+
      2023-06-30
    • 一条SQL语句在MySQL中是如何执行的
      今天就跟大家聊聊有关一条SQL语句在MySQL中是如何执行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言最近开始在学习mysql相关知识,自己...
      99+
      2024-04-02
    • MyBatis的SQL语句执行过程是什么
      这篇文章主要介绍“MyBatis的SQL语句执行过程是什么”,在日常操作中,相信很多人在MyBatis的SQL语句执行过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis的SQL语句执行过程...
      99+
      2023-06-30
    • MySQL中一条update语句是怎么执行的
      本篇内容主要讲解“MySQL中一条update语句是怎么执行的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中一条update语句是怎么执行的”吧!前期准备⭐⭐首先创建一张表,然后插入...
      99+
      2023-06-29
    • MySQL中一条SQL查询语句是如何执行的
      目录前言1. 处理连接1.1 客户端和服务端的通信方式1.1.1 TCP/IP协议1.1.2 UNIX域套接字1.1.3 命名管道和共享内存1.2 权限验证1.3 查看MySQL连接...
      99+
      2024-04-02
    • MyBatis中怎么执行动态SQL语句
      MyBatis中执行动态SQL语句的方式是通过使用动态SQL语句的标签来实现。在MyBatis中,有以下几种常用的动态SQL标签: ...
      99+
      2024-04-09
      MyBatis
    • 一条SQL更新语句的执行过程解析
      目录一、执行过程二、日志模块1、物理日志redo logredo log的使用场景redolog配置2、逻辑日志binlog两阶段提交binlog使用场景前言: 上一篇文章讲解了SQ...
      99+
      2024-04-02
    • MySQL中一条SQL是怎么执行的
      这篇文章主要讲解了“MySQL中一条SQL是怎么执行的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中一条SQL是怎么执行的”吧!大体来说,MyS...
      99+
      2024-04-02
    • java jdbc执行sql语句的方法是什么
      在Java中使用JDBC执行SQL语句的方法主要有以下几种:1. 使用Statement对象执行SQL语句:```javaState...
      99+
      2023-09-27
      java jdbc sql
    • java中怎么用jdbc执行sql语句
      在Java中使用JDBC执行SQL语句的一般步骤如下:1. 加载数据库驱动程序(一般在应用程序的入口处执行):javaClass.f...
      99+
      2023-10-23
      java jdbc sql
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作