MyBatis面试题总结

1、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签
答:、、、、;加上动态sql的9个标签trim|where|set|foreach|if|choose|when|otherwise|bind

2、Mybatis执行批量插入,能返回数据库主键列表吗
答:能,JDBC都能,Mybatis当然也能

3、Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不
答:Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind
其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能

4、Mybatis都有哪些Executor执行器?它们之间的区别是什么
答:Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor:
SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象
ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map内,供下一次使用。简言之,就是重复使用Statement对象
BatchExecutor:执行update,将所有sql都添加到批处理中,等待统一执行,它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理

5、MyBatis与JDBC的比较
JDBC:
1 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能
2 Sql语句写在代码中造成代码不易维护
3 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应
4 对结果集解析麻烦
MyBatis:
1 在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接
2 将Sql语句配置在XXXXmapper.xml文件中与java代码分离
3 Mybatis自动将java对象映射至sql语句
4 Mybatis自动将sql执行结果映射至java对象

6、SqlMapConfig.xml中配置有哪些内容
properties(属性)、settings(配置)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)、plugins(插件)、environments(环境集合属性对象)、environment(环境子属性对象)、transactionManager(事务管理)、dataSource(数据源)、mappers(映射器)

7、MyBatis的一级缓存和二级缓存
一级缓存:
Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象
二级缓存:
Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的

8、Mapper编写有哪几种方式

  1. 接口实现类继承SqlSessionDaoSupport
  2. 使用org.mybatis.spring.mapper.MapperFactoryBean
  3. 使用mapper扫描器

你可能感兴趣的:(MyBatis)