首页 > 编程语言 >java面试-mybatis篇

java面试-mybatis篇

时间:2024-05-05 16:34:00浏览次数:18  
标签:mapper 缓存 java 接口 面试 二级缓存 sql mybatis

1.#{}和${}的区别是什么

  #{}是预编译处理,在mybatis处理#{}时,会将其转换为?,这种方式可以有效避免sql注入。

  ${}是字符串替换,在mybatis处理${}时,会将其替换成变量的值。

2.通常一个xml映射文件,都会有一个对应的dao接口。请问这个dao接口原理是什么,dao接口的方法参数不同时,支持重载吗?

  Dao接口就是mapper接口。接口的全限名就是映射文件的namespace的值。接口的方法名就是映射文件的id值,接口方法内的参数就是传递给sql的参数。

  mapper接口是通过“全限名+方法名”作为key进行保存的,唯一对应一个mapperStatement对象。

  mapper接口的工作原理是通过jdk动态代理,为mapper生成代理对象proxy,然后执行对应的mapperStatement对象所代表的sql,然后将sql执行结果返回。

3.mybatis的三级缓存

  一级缓存默认是开启的,作用域是SqlSession 级别的,所以命中率极低。相同SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲中,以后直接先从缓存中取出数据,不会直接去查数据库。

  二级缓存是多个 SqlSession 共享的,其作用域是 mapper 的同一个 namespace,不同 的 sqlSession 两次执行相同 namespace 下的 sql 语句且向 sql 中传递参数也相同即最终执行 相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从 缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis 默认没有开启二级缓存 需要在 setting 全局参数中配置开启二级缓存。

  三级缓存基于SessionFactory级别的缓存,由于一级缓存二级缓存的命中率极低,都是在单个进程之类进行缓存,多进程缓存就不好使,mybatis默认提供了接口可以自定义缓存。需要借助redis。

标签:mapper,缓存,java,接口,面试,二级缓存,sql,mybatis
From: https://www.cnblogs.com/wxynb/p/18173604

相关文章

  • Jmeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决思路
    一、问题原因用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。概念补充:内存泄露:应用使用资源之后没有及时释放,导致应......
  • Java(5)-双亲委派机制
    如何理解双亲委派机制双亲委派机制是Java中类加载器加载类的一种方法,可以想象一个大家庭中的孩子想要一本书来阅读:在这个家庭中,孩子会先向他的父亲(子类加载器)要这本书,如果没有这本书,他的父亲就会去向孩子的祖父(父类加载器)要这本书。这个过程会一直持续,直到到达家族中的最高辈分,......
  • java exception and finally return
    exceptioncategorythrowableallbelongstothrowableerrorStackOverFlowOutOfMemoryruntimeexceptionArrayIndexOutOfBoundsExceptionNullPointerExceptioncheckecexception(needtocatchorthrows)catch最好设置一个兜底的匹配原则匹配的原则是:如果抛出的异......
  • java: 无效的目标发行版: 17 , 解决方案
    问题描述解决方案......
  • JavaScript--元素偏移量(offset)
    一、offset是什么 1、offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态得到元素的位置(偏移)、大小(元素内容+padding+border);2、获得元素距离带有定位父元素的位置;3、注意:返回的数据都不带单位; offset系列常用属性:element.offsetHeight返回任何一个元素的高......
  • 蚂蚁面试:Springcloud核心组件的底层原理,你知道多少?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • JAVA-Agent探针打印方法执行的返回值
     1、创建一个maven项目,不要用springboot的 引入依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependenc......
  • day30-JavaScript(2)
    1、BOM对象BOM:Broswerobjectmodel,即浏览器提供我们开发者在javascript用于操作浏览器的对象。1.1、window对象窗口方法//BOMBrowserobjectmodel浏览器对象模型//js中最大的一个对象.整个浏览器窗口出现的所有东西都是window对象的内容.console.log(window);......
  • 新人小白第一天学Java
    我对计算机知识学习是比较感兴趣的,但是说实在话计算机语言学习我还是第一次接触,也是0基础学习。虽然不知道会学成什么样子,但我会不断坚持的去学习,希望会收到好的效果。我从事文员的这个工作岗位已经十多年了,虽然平时对计算机办公软件的使用和一般维护有所应用,但对于在计算机语言方......
  • typescript仅仅是为了给javascript增加类型而对java的一个仿制吗
    如果是这样,我不直接学习java或者c#就好了吗?(不考虑前端编程这个因素)或者换句话说,typescript跟java在语法语义有什么不同吗?能给编程带来什么帮助吗?带着这个疑问,翻了一下现有的资料,找到typescript官网的一段解释,觉得有点意思,翻出来,供大家参考。https://www.typescriptlang.org/doc......