mybatis面试题

闲来无事 给大家整理几道基础的mybatis面试常问的
1,ORM是什么?
ORM(ObjectRelationalMapping)是对象关系映射。
对象和关系型数据库表格中的⼀⾏是⼀⼀对应的。
2
什么是MyBatis?
MyBatis是⼀个半⾃动化的持久层框架,⽤来做对象关系映射。
3.
为什么说MyBatis是半⾃动ORM映射⼯具?它与全⾃动的区别在哪⾥?
MyBatis在ORM时,需要⼿动编写SQL来完成,所以,称之为半⾃动ORM映射⼯具。
JPA/Hibernate是⼀个全⾃动化的持久层框架,可以⽆需书写SQL语句,即可完成ORM。
4.
简述MyBatis框架的优缺点。
优点

SQL写在XML⾥,SQL语句与程序代码解耦合,便于统⼀管理

⽀持编写动态SQL语句,SQL语句可重⽤
缺点

SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
5.
MyBatis编程步骤是什么样的?
•创建SqlSessionFactory
•通过SqlSessionFactory创建SqlSession
•通过SqlSession执⾏数据库增删改查操作
•调⽤SqlSession.commit()提交事务
•调⽤SqlSession.close()关闭会话
6.
使⽤MyBatis框架时,Mapper接⼝⾥的⽅法能重载吗?
Mapper接⼝⾥的⽅法,是不能重载的。⼀旦允许重载就意味着⽅法名相同,MyBatis就⽆法确定是哪个⽅法。
7.
MyBatis动态SQL是做什么的?都有哪些动态SQL?
动态SQL可以让我们在映射⽂件内以标签的形式完成逻辑判断、循环和动态拼接等功能。MyBatis提供了9种动态标
签trim|where|set|foreach|if|choose|when|otherwise|bind。
8.
简述Mybatis的⼀级、⼆级缓存。
•⼀级缓存是SqlSession级别的缓存,当SqlSession关闭后⼀级缓存即被清空。⼀级缓存默认是打开的。
•⼆级缓存的作⽤域为Mapper,即关闭SqlSession后也会继续存在。
9.
MyBatis中的缓存是如何实现的?
MyBatis中的⼆级缓存是⼀个实现了Cache接⼝的类PerpetualCache。
其中采⽤了⼀个HashMap来保存缓存的内容。对缓存的添加和读取都是通过调⽤这个映射的put和get⽅法来完成
的。
10.MyBatis中如何开启⼆级缓存?
默认情况下⼆级缓存关闭的。可以通过在映射⽂件中加⼊来启⽤。
11.
MyBatis中的缓存什么时候会被更新?
当某⼀个作⽤域(⼀级/⼆级缓存)进⾏了增删改操作后,该作⽤域下所有被查询出的缓存内容都会被清空。再去执⾏
查询操作时,因为缓存已经被清空,就会重新更新缓存。
12
更新
•只需要建⽴⼀个类实现MyBatis中的Cache接⼝并实现其中的所有⽅法,将之前默认对HashMap中的操作转换为
对Redis的操作即可
•在标签中加⼊type属性,属性后写好我们⾃⼰的实现类即可。
13.什么是Executor?它的主要作⽤是什么?
MyBatis定义了⼀个Executor接⼝,其中包含查询,修改,事务,缓存相关的抽象⽅法来操作数据库。
14.MyBatis都有哪些Executor执⾏器?它们之间的区别是什么?
MyBatis有三个执⾏器,他们继承了BaseExecutor抽象类,BaseExecutor抽象类⼜实现了Executor接⼝。
•SimpleExecutor:每执⾏⼀次整删改查,就开启⼀个Statement对象,⽤完⽴刻关闭
•ReuseExecutor:执⾏SQL语句时以SQL语句作为key查找Statement对象,存在就使⽤,不存在就创建。⽤完
后,不关闭Statement对象,⽽是放置于Map<String,Statement>内,供下⼀次使⽤。简单来说就是重复使⽤
Statement对象
•BatchExecutor:执⾏批处理操作,每个Statement对象都是addBatch()完毕后,统⼀通过executeBatch()进⾏批
处理
15.MyBatis中默认的Executor执⾏器是什么?
SimpleExecutor
16.MyBatis中如何指定使⽤哪⼀种Executor执⾏器?
•在MyBatis配置⽂件中,在settings元素中可以指定默认的执⾏器。
<settingname="defaultExecutorType"value=“SIMPLE”/>
其中SIMPLE可以改为REUSE和BATCH
•在openSession(ExecutorTypeexecType)⽅法的参数中指定
17.
MyBatis的批处理操作⽀持增删改查操作吗?为什么?
只⽀持增删改,不⽀持查询操作。因为JDBC也不⽀持批量查询。
18.什么是MappedStatement?它的作⽤是什么?
MappedStatement是⼀个类,⾥⾯有诸多属性。存储了要映射SQL语句的id,映射信息(如输⼊参数,输出结果映
射,SQL语句类型)等内容。
未完 写着写着就困了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值