首页 > 作文

Mybatis执行流程、缓存原理及相关面试题汇总

更新时间:2023-04-05 01:11:57 阅读: 评论:0

目录
一、mybatis执行流程二、mybatis缓存1、一级缓存2、二级缓存3、缓存原理三、相关面试题1、为什么说 mybatis 是半自动orm映射工具?它与全自动的区别在哪里?2、简述一下mybatis的执行流程吧 ?3、说一下mybatis的优缺点 ?4、#{} 和 ${} 的区别是什么 ?5、mybatis的动态sql有什么作用?执行原理是什么?有哪些常用标签?总结

一、mybatis执行流程

具体分析mybatis是如何操作数据库的!

1、定义我们的核心配置文件的路径,这个路径是从target/class下开始找的!

 string config = "mybatis-config.xml" ;

2、读取这个config表示的文件

 inputstream inputstream= resources.getresourceasstream(config);

3、创建sqlssionfactorybuilder对象

sqlssionfactorybuilder builder = new sq天使在身边读后感lssionfactorybuilder();

4、创建sqlssionfactory对象

sqlssionfactory ssionfactory = builder.build(inputstream);

5、获取sqlssion对象,从sqlssionfactory中获取

sqlssion sqlssion = ssionfactory.openssion();

6、【重点】执行我们的执行的的sql语句标识。sql文件中的namespace + sql标签的id值

string sqlid = "com.sqx.dao.urmapper.geturbyid";

7、执行sql语句,通过sqlid找到语句,并执行!

list<object> objects = sqlssion.lectlist(sqlid);

8、关闭sqlssion

sqlssion.clo();

总结

myabtis启动的时候会加载mybatis-config.xml这个核心配置文件,得到要操作的数据库以及我们mapper文件的的信息,然后将其以数据流的形式保存起来传给sqlssionfactorybuilder,创造出对应该设计学类数据库的sqlssionfactory工厂,工厂生产sqlssion,这个sqlssion中包含了对该库的增删改查方法,我们需要通过namespace + sqlid来确定我们执行的是哪个sql,这一步操作可以通过sqlesion.getmapper()拿到接口,通过调用接口的方法(方法绑定了我们的sql,包含namespace + sqlid),执行对应的sql语句!

二、mybat王夫之思想is缓存

mybatis缓存无论是一级缓存还是二级缓存都是本地缓存,都会占用jvm的内存,一旦java停止缓存失效!

1、一级缓存

概述

一级缓存保存在我们的sqlssion当中只要是同一个sqlsisson(与数据库建立的会话)就会使用同一个缓存一级缓存是我们mybatis默认开启的!

如下是对一级缓存进行测试:

查看我们的测试结果

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

我们再次查看测试结果

得出结论我们的一级缓存只是在同一个sqlssion当中有效!

2、二级缓存

概述

二级缓存又称”全局缓存”,是基于namespace级别的缓存,一个namespace对应一个二级缓存!

工作机制:

一个会话查询一条数据,这个数据会被放在一级缓存当中当我们会话关闭的时候,会把这个数据从1级缓存迁入二级缓存当中,新的会话就可以在二级缓存当中找到这个数据!不同的会话查询不同的namespace的时候,会将不同namespace中的数据缓存到自己对应的缓存(map)中!

使用步骤 :

只需在需要使用缓存的namespace 中加入< cache/>即可

<!--在当前mapper.xml中使用二级缓存,并配置相关参数--><cache  eviction="fifo" flushinterval="60000" size="512" readonly="true"/>eviction :缓存的回收策略lru(最长时间未使用)、lfu(访问次数最少)、fifo(默认)、soft(软引用)、weak(弱引用)flushinterval :  缓存刷新间隔缓存多久清空一次,默认是不会清空的,设置一个毫秒值readonly :是否只读size :缓存存放多少元素

我们还可以通过配置实现自定义缓存

 <!--  开启mybatis的二级缓存,其本质还是我们mybatis帮我们实现了自身提供的缓存接口cache,也就是cache标签的type属性默认指定了缓存策略--> <cache type=""/>     <!--本质上就是这种写法,我们可通该修改type来选择自定缓存策略--> <cache type="rg.apache.ibatis.cache.impl.perpetualcache"/>  

3、缓存原理

如图所示

缓存执行流程

当我们的sql执行的时候,先去二级缓存namespace中查看是否存在缓存,然后如果二级缓存不存在,查看当前sqlssion中一级缓存中是否存在,最后一、二级缓存中都不存在的话那么就去数据库查询,接着会将查询出来的结果保存在我们的一级缓存当中,当前会话(sqlssion)结束,就会将一级缓存中的数据,同步到我们的二级缓存

三、相关面试题

1、为什么说 mybatis 是半自动orm映射工具?它与全自动的区别在哪里?

什么是orm

orm(object relational mapping),对象关系映射,是一种为了解决关系型数据库数据与简单 java 对象(pojo)建里映射关系的技术。

为什么说 mybatis 是半自动orm映射工具?它与全自动的区别在哪里?

首先,像 hibernate、jpa 这种属于全自动 orm 映射工具,使用 hibernate 查询关联对象或者生活随想关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 orm 映射工具。换句话来解释就是说 mybatis 是 半自动 orm 最主要的一个原因是,它需要在 xml 或者注解里通过手动或插件生成 sql,才能完成 sql 执行结果与对象映射绑定。

2、简述一下mybatis的执行流程吧 ?

mybatis 是以一个 sqlssionfactory 实例为核心,sqlssionfactory 的实例可以通过 sqlssionfactorybuilder 获得。sqlssionfactorybuilder 可以从 xml 配置文件或一个预先配置的 configuration 实例来构建出 sqlssionfactory 实例。sqlssionfactory 实例工厂可以生产 sqlssion ,它里面提供了在数据库执行 sql 命令所需的所有方法。

3、说一下mybatis的优缺点 ?

优点

基于sql语句编写、相当灵活,sql写在xml文件当中,解除了sql与程序代码的耦合,便于统一管理消除了jdbc的冗余代码、能够与spring很好的集成

缺点

sql语句的编写工作量大,尤其是字段多,关联表多的情况下,对开发人员的sql语句功底有一定的要求sql语句依赖数据库,导致数据库移植性差,不能随意更换数据库

4、#{} 和 ${} 的区别是什么 ?

#{} 是占位符,预编译处理,${}是拼接符,字符串替换,没有预编译处理mybatis在处理#{}的时候,#{} 传入的参数是字符串,会将sql中的#{} 替换为?调用preparedstatement的t方法赋值myabtsi在处理的 时 候 , 就 是 原 值 传 入 , 就 是 把 {}的时候,就是原值传入,就是把的时候,就是原值传入,就是把{}替换为传来的值#{}通过编译预处理可以有效地防止sql注入问题,提高系统的安全性,${}则不能防止sql注入

5、mybatis的动态sql有什么作用?执行原理是什么?有哪些常用标签?

mybatis动态sql可以在xml映射文件内,以标签的形式编写动态sql执行原理:根据参数表达乌克兰的地理位置式的值完成逻辑判断,并且动态拼接sqlmybatis提供9种动态sql的标签:trim、where、t、foreach、if、choo、when、otherwi、bind

总结

到此这篇关于mybatis执行流程、缓存原理及相关面试题的文章就介绍到这了,更多相关mybatis执行流程、缓存及面试题内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-05 01:11:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/c1adb1f3e22b1b7533f10c234eb8ea72.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Mybatis执行流程、缓存原理及相关面试题汇总.doc

本文 PDF 下载地址:Mybatis执行流程、缓存原理及相关面试题汇总.pdf

标签:缓存   二级缓存   对象   语句
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图