发表时间:2022-03-25来源:网络
具体分析Mybatis是如何操作数据库的!

1、定义我们的核心配置文件的路径,这个路径是从target/classes下开始找的!
String config = "mybatis-config.xml" ;
2、读取这个config表示的文件
InputStream inputStream= Resources.getResourceAsStream(config);3、创建Ser对象
Ser builder = new Ser();4、创建S对象
S sessionFactory = builder.build(inputStream);5、获取S对象,从S中获取
S s = sessionFactory.openSession();6、【重点】执行我们的执行的的sql语句标识。sql文件中的namespace + sql标签的Id值
String sqlId = "com.sqx.dao.UserMapper.getUserById";
7、执行sql语句,通过sqlId找到语句,并执行!
List objects = s.selectList(sqlId);8、关闭S
s.close();总结
Myabtis启动的时候会加载mybatis-config.xml这个核心配置文件,得到要操作的数据库以及我们Mapper文件的的信息,然后将其以数据流的形式保存起来传给Ser,创造出对应该数据库的S工厂,工厂生产S,这个S中包含了对该库的增删改查方法,我们需要通过namespace + sqlId来确定我们执行的是哪个sql,这一步操作可以通过S.getMapper()拿到接口,通过调用接口的方法(方法绑定了我们的sql,包含namespace + sqlId),执行对应的SQL语句!
Mybatis缓存无论是一级缓存还是二级缓存都是本地缓存,都会占用JVM的内存,一旦Java停止缓存失效!
概述
一级缓存保存在我们的S当中只要是同一个S(与数据库建立的会话)就会使用同一个缓存一级缓存是我们Mybatis默认开启的!如下是对一级缓存进行测试:

查看我们的测试结果

采用不同的S测试数据,进行如下修改!

我们再次查看测试结果

得出结论我们的一级缓存只是在同一个S当中有效!
概述
二级缓存又称"全局缓存",是基于namespace级别的缓存,一个namespace对应一个二级缓存!
工作机制:
一个会话查询一条数据,这个数据会被放在一级缓存当中当我们会话关闭的时候,会把这个数据从1级缓存迁入二级缓存当中,新的会话就可以在二级缓存当中找到这个数据!不同的会话查询不同的namespace的时候,会将不同namespace中的数据缓存到自己对应的缓存(map)中!使用步骤 :
只需在需要使用缓存的namespace 中加入< cache/>即可
eviction :缓存的回收策略 LRU(最长时间未使用)、LFU(访问次数最少)、FIFO(默认)、SOFT(软引用)、WEAK(弱引用) flushInterval : 缓存刷新间隔 缓存多久清空一次,默认是不会清空的,设置一个毫秒值 readOnly :是否只读 size :缓存存放多少元素我们还可以通过配置实现自定义缓存
如图所示

缓存执行流程
当我们的sql执行的时候,先去二级缓存namespace中查看是否存在缓存,然后如果二级缓存不存在,查看当前s中一级缓存中是否存在,最后一、二级缓存中都不存在的话那么就去数据库查询,接着会将查询出来的结果保存在我们的一级缓存当中,当前会话(S)结束,就会将一级缓存中的数据,同步到我们的二级缓存什么是ORM
ORM(Object Relational Mapping),对象关系映射,是一种为了解决关系型数据库数据与简单 Java 对象(POJO)建里映射关系的技术。
为什么说 Mybatis 是半自动ORM映射工具?它与全自动的区别在哪里?
首先,像 Hibernate、JPA 这种属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。换句话来解释就是说 MyBatis 是 半自动 ORM 最主要的一个原因是,它需要在 XML 或者注解里通过手动或插件生成 SQL,才能完成 SQL 执行结果与对象映射绑定。优点
基于SQL语句编写、相当灵活,SQL写在XML文件当中,解除了sql与程序代码的耦合,便于统一管理消除了JDBC的冗余代码、能够与Spring很好的集成缺点
SQL语句的编写工作量大,尤其是字段多,关联表多的情况下,对开发人员的SQL语句功底有一定的要求SQL语句依赖数据库,导致数据库移植性差,不能随意更换数据库到此这篇关于Mybatis执行流程、缓存原理及相关面试题的文章就介绍到这了,更多相关Mybatis执行流程、缓存及面试题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:MyBatis一级缓存避坑完全指南深入理解MyBatis中的一级缓存与二级缓存详解Java的MyBatis框架中的缓存与缓存的使用改进深入理解Mybatis二级缓存Java经典面试题汇总:MybatisMyBatis详细执行流程的全纪录
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务