[001-05-003].第14节:MyBatis操作数据库的原理

a.MyBatis框架的结构:

在这里插入图片描述

b.MyBatis执行过程:

  • 1.mybatis配置:
    • SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
    • mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载
  • 2.通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
  • 3.由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
  • 4.mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
  • 5.Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id
  • 6.Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
  • 7.Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

c.MyBatis执行原理:

首先需要解析配置(MyBatis-config.xml),将配置文件的内容转换为Java对象(Configuration)加载到内存中,包括一些xxxMapper.xml文件,将这些文件解析成MappedStatement对象,保存其SQL语句、参数映射等信息

我们在代码里面写的Mapper都是接口,实际的实现类是由MyBatis利用JDK动态代理生成的,具体是在MapperProxyFactory中生成的代理类

在这里插入图片描述
当调用Mapper接口中的方法的时候,代理对象会将调用的信息传递给MyBatis内部的MapperProxyFactory对象,实际上调用方法时,会触发MapperMethod来执行具体逻辑

在这里插入图片描述

可以看到里面分类 insert、update、delete等不同的处理方法,这时候就可以执行具体的语句了

这里先解释下Command是什么,他是MapperMethod内部的一个属性

在这里插入图片描述
这个command就是通过调用的接口名 + 方法名,从Configuration中找到MappedStament对象,这个记录了SQL内容、出参入参等等,这样就得到了最终的SQL相关信息了,跟前面的配置串起来了

在这里插入图片描述
MyBatis还有缓存机制,会经过CachingExecutor的处理,这里主要是二级缓存的处理。
最终还是会看到JDBC执行SQL的流程,从下面的代码可以看到,获取connection实际上会从连接池中获取,且得到Stateent

在这里插入图片描述
然后调用exectute执行

在这里插入图片描述
最终通过resultSethandler处理查询得到的结果,将其映射到对应的实体对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值