Mybatis-Interview

93 阅读2分钟

Mybatis缓存

  1. 一级缓存

默认开启,只有在同一个session中有效,在Spring的service层中,使用事务标识,则处于Mybatis的同一个session中。因为第二次调用service,sqlSession就已经关闭。 如果sqlSession执行了commint(insert,update,delete),就会清空sqlSession中的一级缓存,避免脏读。注意:两次查询必须在同一个sqlSession中,否则不会走一级缓存

  1. 二级缓存

默认关闭,存储作用域Mapper(nameSpace),可自定义存储原,作用域为nameSpace是指,该Mapper文件下的所有select语句都有缓存,这样不同线程之间就公用二级缓存

注意:Mybatis-plus默认开启Mybatis的二级缓存 在yaml配置总开关,在各个mapper配置缓存 开启二级缓存步骤

  1. 在yaml中配置总开关
  2. 在各个mapper配置开启cache

为什么关闭二级缓存

如果启动多个应用,二级缓存会出现数据不一致性 二级缓存:本地缓存?连表有脏读?

${}与#{}的区别

${}是一个变量占位符,静态文本替换,存在sql注入风险,

#{}是sql参数占位符,Mybatis会将#{}替换为?,在执行前使用preparedStatment设置参数,

xml映射文件常见标签

标题
增删改查insert,delete,update,select
条件where,if,case,trim,choose,otherwise
入参parameterType,parameterMap
返回结果resultMap,resultType,result
其他include,binding,sql,set

Dao接口工作原理是什么?Dao接口方法入参不同,方法可以重载吗?

工作原理:通过动态代理生产对应的sql进行查询

不可以重载,Mybatis通过Dao接口及方法名唯一确定对应的sql

Mybatis是如何分页?分页原理是什么?

简述一下Mybatis插件运行原理,及如何编写一个插件

Mybatis批量插入,能返回主键列表吗?

Mybatis中文网

www.shuzhiduo.com/topic/mybat…