阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到文章了。每天都会有分享,都是免费订阅,请您放心关注。                                               

注:本文转载自网络,如有侵权,请在后台留言联系我们进行删除,谢谢!

今天给大家分享一些面试官喜欢提问的Mybatis面试题,好了,废话不多说,直接上干货吧!

一、请说说在Mybatis 中#和$有什么区别?

#相当于对数据 加上 双引号,$相当于直接显示数据

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成 sql 时的值为 order by "111", 如果传入的值是 id,则解析成的 sql 为 order by "id".

2. $将传入的数据直接显示生成在 sql 中。如:order by $user_id$,如果传入的值是 111,那么解析成 sql 时的值为order by user_id, 如果传入的值是 id,则解析成的 sql 为 order by id.

3. #方式能够很大程度防止 sql 注入。

4.$方式无法防止 Sql 注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.

二、说说在使用JDBC 编程时,它有哪些不足之处,MyBatis 是如何解决这些问题的?

1. 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

解决:在 SqlMapConfig.xml 中配置数据连接池,使用连接池管理数据库连接。

2. Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。

解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。

3. 向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis 自动将 java 对象映射至 sql 语句。

4. 对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对象解析比较方便。

解决:Mybatis 自动将 sql 执行结果映射至 java 对象。

三、请你说一下使用 MyBatis 的 mapper 接口调用时有哪些要求?

1. Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同

2. Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同

3. Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的 resultType 的类型相同

4. Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径。

四、你知道Mybatis 中一级缓存与二级缓存吗?

1. 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或close 之后,该 Session 中的所有 Cache 就将清空。

2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为Mapper(Namespace),并且可自定义存储源,如 Ehcache。

作用域为 namespance 是指对该 namespance 对应的配置文件中所有的 select 操作结果都缓存,这样不同线程之间就可以共用二级缓存。

启动二级缓存:在 mapper 配置文件中:。

二级缓存可以设置返回的缓存对象策略:。当 readOnly="true"时,表示二级缓存返回给所有调用者同一个缓存对象实例,调用者可以 update 获取的缓存实例,

但是这样可能会造成其他调用者出现数据不一致的情况(因为所有调用者调用的是同一个实例)。

当 readOnly="false"时,返回给调用者的是二级缓存总缓存对象的拷贝,即不同调用者获取的是缓存对象不同的实例,这样调用者对各自的缓存对象的修改不会影响到其他的调用者,即是安全的,所以默认是 readOnly="false";

3. 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

五、MyBatis 在 insert 插入操作时返回主键 ID

1、数据库为 MySql 时:

useGeneratedKeys="true" >

keyProperty”表示返回的 id 要保存到对象的那个属性中,“useGeneratedKeys”表示主键 id 为自增长模式。

2、MySQL 中做以上配置就 OK 了

数据库为 Oracle 时:

SELECT SEQ_USER.NEXTVAL as userId from DUAL

insert into user (user_id, user_name, modified, state)

values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR},

#{modified,jdbcType=TIMESTAMP}, #{state,jdbcType=INTEGER})

由于 Oracle 没有自增长一说法,只有序列这种模仿自增的形式,所以不能再使用“useGeneratedKeys”属性。而是使用将 ID 获取并赋值到对象的属性中,insert 插入操作时正常插入 id。

六、说一说使用Mybatis开发的时候,步骤是什么样的?

1、创建 SqlSessionFactory

2、通过 SqlSessionFactory 创建 SqlSession

3、通过 sqlsession 执行数据库操作

4、调用 session.commit()提交事务

5、调用 session.close()关闭会话

好了,今天的面试题就和大家分享到这里咯,记得好好看看哦

mybatis oracle 多条件批量删除_面试官经常喜欢问的Mybatis经典面试题,值得好好收藏哦!...相关推荐

  1. 面试java你最擅长什么_面试官最喜欢问的10道Java面试题

    1.Java的HashMap是如何工作的? HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值. HashMap 基于 hashing 原理,我们通过 put ()和 g ...

  2. mysql经常问到的面试题_20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)...

    1. 内存模型以及分区,需要详细到每个区放什么. JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面, class 类信息常量池(static 常量和 static 变量)等放 ...

  3. 为什么面试官总喜欢问String?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者:tan日拱一兵 来源:公众号「日拱一兵」 关于 Java String,这是面试的基础 ...

  4. 今天来谈谈面试官最喜欢问JS中的闭包问题吧

    今天来谈谈面试官最喜欢问JS中的闭包问题吧 1.什么是闭包? 闭包是指有权访问另外一个函数作用域中的变量的函数,闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在.闭包就是函数的&qu ...

  5. 阿里的面试官都喜欢问哪些问题?

    作者:徐刘根 | 公众号:Java之间 金九银十是招聘的旺季,小编在这里也给大家整理了一套阿里面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力! 首先我们需要明白一个事实,招 ...

  6. redis删除过期key的算法_面试官别再问我Redis内存满了该怎么办了

    概述 Redis的文章,我之前写过一篇关于「Redis的缓存的三大问题」,累计阅读也快800了,对于还只有3k左右的粉丝量,能够达到这个阅读量,已经是比较难了. 这说明那篇文章写的还过得去,收到很多人 ...

  7. 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

    对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率.大家面试初级.中级或者高级程序员的时候应该大部分 ...

  8. 为什么程序员面试官总喜欢问你有什么技术亮点?

    我们要回答这个问题,首先得知道什么算是亮点?在百度百科上解释的亮点是:比喻有光彩而引人注目的人或者事务.比如说一个旧书拍卖会上,带有作者亲笔签名的书籍是本次拍卖会上的亮点.所以简单来说,亮点和闪光点是 ...

  9. 求职Python开发,面试官最喜欢问的几个问题

    关注公众号「Python专栏」,后台回复:简历模板,获取给大家准备的价值99元的程序员简历模版11份. ![Python专栏二维码](https://img-blog.csdnimg.cn/20190 ...

  10. 面试官超级喜欢问的JVM

    前言 随着阿巴阿巴在面试中愈战愈勇,这几天又约上面试了,这次面试官让她谈谈对JVM的理解. 回家等通知 面试官: 你对JVM的内存模型了解吗?能否讲讲里面的细节呢? 阿巴阿巴: JAVA虚拟机在执行J ...

最新文章

  1. 让我去健身的不是漂亮小姐姐,居然是贝叶斯统计!
  2. R语言ggplot2可视化柱状图并自定义柱体的宽度(通过变量指定条形的宽度)实战、条形图并自定义条形的宽度实战
  3. GT Transceiver的复位与初始化(3)TX初始化和复位流程
  4. Windows服务启动进程----Cjwdev.WindowsApi.dll
  5. 微信小程序 基础3【组件化开发、自定义组件、全栈开发、使用Express】
  6. jax-ws和jax-rs_JAX-RS和JSON-P集成
  7. Python的win32serviceutil之疑似BUG
  8. python中__init__方法_关于python中__init__方法理解
  9. Spring Boot工作笔记-RabbitMQ中Unsupported major.minor version 52.0问题
  10. Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式
  11. java 打印excel
  12. 毕业设计 嵌入式电子时钟设计与实现
  13. 编译carrot2发布
  14. Qunee For Html5 开发清新、高效的拓扑图组件
  15. python英文词频统计软件_英语词频统计软件功能介绍
  16. TrueCrypt安装及其使用教程
  17. 京东数据化运营(三)- 复购率
  18. Unity 四种截图方法(相机视图、无UI、有UI、Game窗口)
  19. CCIE理论-第十二篇-IPV6-NDP协议
  20. 5G建设:作用究竟有多大

热门文章

  1. python yield和generators(生成器)
  2. 黑马程序员-JavaSE核心知识-01Java介绍
  3. nagios的check_tcp,check_udp插件的使用文档
  4. OSPF Sham-Link
  5. JavaScript通用库(转)
  6. 3.企业安全建设指南(金融行业安全架构与技术实践) --- 安全规划
  7. 12. vim 编辑器
  8. 1. SOAP 简介
  9. 百度地图集成Plist文件需要增加的字段
  10. 关于web开发的一点理解