mybatis 面试题

1、什么是Mybatis?

mybatis是一款优秀的支持自定义SQL查询,存储过程和高级映射的持久层框架,消除了几乎所有的jdbc代码和参数手动设置以及结果集的检索。

mybatis可以使用XML或注解进行配置和映射,mybatis通过参数映射到配置的SQL形成最终执行的SQL语句,最后将执行的SQL的结果映射成Java对象返回。

2、mybatis优点

  1. 小巧,学习成本低,会写SQL上手就很快了。
  2. 封装了jdbc,基本配置好了,大部分的工作量就专注在SQL部分。
  3. 方便维护管理,SQL不需要在Java代码中找,SQL代码可以分离出来,可重用。
  4. 灵活,支持动态SQL。
  5. 支持对象与数据库orm字段关系映射。

3、mybatis的缺点

  1. 由于工作量在SQL上,需要SQL的熟练度高。
  2. 移植性差。SQL语法依赖数据库。不同的数据库的切换可能会因语法差异而报错。

4、什么时候用mybatis

如果你需要一个灵活的,可以动态生成映射关系的框架。目前来说,因为合适,互联网项目使用mybatis还是很多的。

5、mybatis的核心组件有哪些

  1. SqlSessionFactoryBuilder(构造器 ) :它会根据配置信息或者代码来生成SqlSessionFactory。
  2. SqlSessionFactory(工厂接口):依靠工厂来生成SqlSession。
  3. SqlSession(会话):既可以发送SQL去执行返回结果,也可以获取Mapper接口。
  4. SQLMapper:它是最新设计的组件,是由一个Java接口和XML文件(或注解)构成的。需要给出对象的SQL和映射规则。它负责发送SQL去执行,并返回结果。

6、#{}和${}的区别?

${}是字符串替换,#{}是预编译处理,#{}能防止SQL注入问题。

7、mybatis中9个动态标签

if,choose,when,oterwise,trim,where,set,foreach,bind。

8、XML映射文件中有哪些标签?

select,insert,updae,delete,resultMap,parameterMap,sql,include,selectKey和9个动态标签

9、mybatis支持注解吗?优点和缺点?

支持。
优点:对于需求简单SQL逻辑简单的系统,效率较高。
缺点:当SQL变化需要重新编译代码,SQL复杂时,写起来更不方便,不好维护。

10、mybatis动态SQL

mybatis动态SQL可以让我们在XML映射文件内,以标签的形式编写动态SQL,完成逻辑判断和动态拼接SQL的功能。

11、mybatis是如何进行分页的?分页插件的原理是什么?

  1. mybatis使用RowBounds对象进行分页,也可以直接编写SQL实现分页,也可以使用mybatis的分页插件。
  2. 分页插件的原理:实现mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的SQL,然后重写SQL。

举例:select * from student,拦截SQL后重写为:select t.* from (select * from student) t limit 0,10

12、如何获取自增主键

  1. 注解:
@Options(useGeneratedKeys =true, keyProperty =”id”)
int insert( );
  1. XML
<insert id=”insert” useGeneratedKeys=true” keyProperty=” id”>
	sql
</insert>

13、为什么mapper接口没有实现类,却能被正常调用?

因为mybatis在mapper接口使用了动态代理。

14、用注解好还是XML好?

  1. 简单的增删改查可以用注解
  2. 复杂的SQL还是用XML,官方也比较推荐XML方式。XML方式更便于统一维护管理代码。

15、如果不想手动指定别名,如何用驼峰的形式自动映射?

mapUnderscoreToCamelCase=true

16、当实体属性名和表中字段不一致,怎么办?

  1. SQL语句使用别名,如 select order_num orderNum。
  2. 通过映射,
<result property = “order_Num" column =”order_num"/>
  1. 使用15问的驼峰注解的方式

17、like模糊查询怎么写?

  1. ‘%${value}%’,不推荐。
  2. CONCAT(‘%’,#{value},‘%’),推荐。
  3. like ‘%’|| #{value} || ‘%’
  4. LIKE #{value}

18、mybatis支持枚举吗?

支持,有转换器EnumTypeHandler; EnumOrdinalTypeHandler

<typeHandlers>
 <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"
javaType="枚举类(com.xx.StateEnum)"/>
</typeHandlers>

19、SqlSessionFactoryBuilder生命周期

利用XML或者Java代码获得资源构成SqlSessionFactoryBuilder,它可以创建多个SessionFactory,一旦构建成功SessionFactory,就可以回收它了。

20、一级缓存的结构,如何开启一级缓存,如何不使用一级缓存?

  1. 结构是Map.
  2. 默认一级缓存是开启的。
  3. < select >标签内加属性flushCache=true

21、二级缓存如何配置?

这个参数是二级缓存的全局开关,默认值是true,初始状态为启用状态。
如果把这个参数设置为false,即使有后面的二级缓存配置,也不会生效。

<settings>
	<setting name= cacheEnabled” value= true  />
</settings>

22、简述mybatis的插件运行原理,以及如何编写一个插件?

  1. mybatis仅可以编写针对ParameterHandler,ResultSetHandler,StatementHandler,Executor这4中接口的插件,mybatis通过动态代理,为需要的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
  2. 实现mybatis的Interceptor接口并复写 intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住在配置文件中配置你编写的插件。

23、二级缓存的回收策略

  1. LRU(最近最少使用):移除最长时间不被使用的对象,这是默认值。
  2. FIFO(先进先出):按对象进入缓存的顺序来移除它们。
  3. SOFT(软引用):移除基于垃圾回收器状态和软引用规则的对象。
  4. WEAK(弱引用):更积极的移除基于垃圾回收器状态和弱引用规则的对象。

24、mybatis的XML文件中的ID可以重复吗?

同一namespace下,ID不可以重复。

不同namespace下,ID可以重复。

25、和mybatis搭配的Java框架中比较好用的缓存框架以及它的特点?

EhCache是一个纯Java进程内的缓存框架,具有快速,精干等特点。

EhCache主要特性:

  1. 快速。
  2. 简单。
  3. 多种缓存策略。
  4. 缓存数据有内存和磁盘两级,无须担心容量问题。
  5. 缓存数据会在虚拟机重启的过程中写入磁盘。
  6. 可以通过XML,可插入API等方式进行分布式缓存。
  7. 具有缓存和缓存管理器的侦听接口。
  8. 支持多缓存管理器实例以及一个实例的多个缓存区域。

结束!


										永远不要和旁人炫耀你即将得到的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值