mybatis update和insert一起执行_重学Mybatis(一)-------原理 (含面试题)

本文深入探讨Mybatis的更新(update)和插入(insert)操作,解析其工作原理,并结合JDBC的基础知识。文章还涵盖了Mybatis的详细执行流程,包括配置文件解析、SqlSessionFactory构建、SqlSession的使用以及Mapper对象的交互。同时,讨论了面试中常见的Mybatis相关问题,如动态SQL、命名空间的作用和#与$的区别。
摘要由CSDN通过智能技术生成

博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长,文章底部有面试题。

48ddb73e6b4fa2c8c8c35692c6946e74.png

数据库

JDBC(Java DataBase Connectivity)

JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。执行步骤:加载My数据库驱动、获得数据库连接、创建Statement 或者PreparedStatement对象、执行sql获得并处理resultSet、关闭连接。

Mybatis原理

9d1a9b172a5480fe52b55f770370f883.png

mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置@Configuration注解的方式)中构建出SqlSessionFactory,属于线程安全;

然后,SqlSessionFactory的实例直接开启一个SqlSession,再通过SqlSession实例获得Mapper对象并运行Mapper.xml文件中映射对应方法的SQL语句,完成对数据库的增删改查和事务提交或者回滚,之后关闭SqlSession。

说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。

1933131778bc029153e6bec8a389de7a.png

详细流程如下:

1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着标签项。

2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

3、SqlSession对象完成和数据库的交互:

a、用户程序调用mybatis接口层api(即Mapper接口中的方法);

b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象;

c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象;

d、JDBC执行sql;

e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。

原理修改自csdn,链接如下:https://blog.csdn.net/u014745069/article/details/80788127

面试拓展:

  1. MyBatis中的动态SQL是什么意思?
  2. 解释一下MyBatis中命名空间(namespace)的作用。
  3. mybatis中 # 和 $ 的区别?

面试题参考明天的文章中会给出。

78bbfeb042a4bffd7852aa246438a3a6.png

-------------

写的不好,如果大家有更高的见解欢迎评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值