mybatis进阶测试 波哥为大家带来一套mybatis的面试题,测测你对mybatis的掌握程度吧
一、选择题
1.在MyBatis中,获取SqlSessionFactory对象时使用的设计模式是? A.工厂模式 B.建造者模式 C.装饰者模式 D.代理模式
2.以下哪个不属于MyBatis动态SQL的标签? A.if B.choose C.foreach D.else
3.关于#{}和${}的说法错误的是? A.${}方式没有预编译,不会缓存 B.#{}方式没有预编译,不会缓存 C.${}不能防止SQL注入 D.#{}能防止SQL注入
4.以下关于MyBatis的说法错误的是? A.MyBatis默认支持一级缓存但不支持二级缓存 B.MyBatis提供了动态SQL语句,这是MyBatis受欢迎的一个主要原因 C.MyBatis支持延迟加载 D.MyBatis中支持逻辑分页
5.在使用MyBatis时,除了可以使用@Param注解实现多参数入参外,还可以使用()传递多个参数值。 A.Map B.List C.数组 D.Set
6.以下不属于MyBatis基础支持模块的是? A.日志模块 B.binding模块 C.解析器模块 D.插件
7.Executor默认的类型是 A.SIMPLE B.REUSE C.BATCH
8.在MyBatis中,StatementHandler接口的默认实现是? A.SimpleStatementHandler B.PreparedStatementHandler C.CallableStatementHandler
9.关于反射工具的描述错误的是 A.对常见的反射操作进一步封装,提供了更加简洁方便的API B.每一个Reflector对象都对应一个Java类 C.通过ReflectorFactory获取Reflector对象 D.ReflectorFactory中不支持缓存Reflector对象
10.关于缓存的描述错误的是 A.缓存设计使用到了装饰器模式 B.缓存中的PerpetualCache中数据是保持在内存中的 C.二级缓存默认是关闭的 D.在执行查询操作时会先在一级缓存中查找然后再去二级缓存中查找
1
1.关于TypeHandler的描述错误的是? A.TypeHandler的作用是实现JavaType和JDBCType的双向转换 B.BaseTypeHandler实现了TypeHandler接口实现了对空数据的处理 C.系统中的众多TypeHandler实现类都保存在TypeHandlerRegistry中,方便我们查找使用 D.我们自定义的TypeHandler仅仅只需要继承BaseTypeHandler即可
12.关于日志模块的说法错误的是 A.日志模块使用到了适配器模式 B.日志模块中默认使用的日志框架是slf4j C.日志模块中jdbc包提供了将日志信息保存到数据库中的功能 D.我们可以在settings配置中来指定我们要使用的日志框架
13.关于binding模块的描述错误的是 A.MapperRegistry中保存了接口和MapperProxy的对应关系 B.MapperRegistry中保存了接口和MapperProxyFactory的对应关系 C.MapperProxyFactory的作用是创建接口的代理对象。 D.本质上Mapper接口的代理对象就是MapperProxy
14.关于缓存的描述错误的是 A.MyBatis中自带的有一级缓存和二级缓存 B.MyBatis中的一级缓存默认就是打开的 C.MyBatis中的二级缓存默认是关闭的,需要我们手动打开 D.我们执行SQL查询操作的时候是先检查一级缓存再检查二级缓存的
15.关于MyBatis中核心对象的生命周期描述错误的是? A.SqlSessionFactoryBuilder实例的最佳作用域是方法范围,也就是定义为本地方法变量既可 B.SqlSessionFactory实例的生命周期应该在整个应用的执行期间都存在 C.SqlSession实例时线程不安全的,因此其生命周期应该是请求或方法范围 D.SqlSession实例通常定义为一个类的静态变量
16.关于Executor的描述错误的是? A.SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。 B.ReuseExecutor:每执行一次update或者select操作,会以SQL为key查找Statement对象,存在就使用,不存在就创建,用完后不关闭,而是以SQL为key保存在Map对象中,实现了Statement的复用 C.BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。 D.Executor的这些特点,都严格限制在SqlSessionFactory生命周期范围内
17.在MyBatis中关于插件的描述错误的是 A.MyBatis中的插件只能拦截Executor、StatementHandler、ParameterHandler、ResultSetHandler这四个对象中的特定方法,其他对象都是不能拦截的 B.MyBatis中提供的Plugin是实现了InvocationHandler接口的代理类。 C.在自定义拦截器的过程中我们通过@Intercept注解来指定要拦截的方法 D.插件是MyBatis提供给我们来扩展和增强MyBatis功能的
18.关于MyBatis整合Spring中的说明错误的是 A.MyBatis整合到Spring中后相关的核心对象会交给Spring容器管理 B.DefaultSqlSession是线程不安全的,所以在Spring中通过SqlSessionTemplate来处理 C.SqlSessionTemplate中是通过同步代码块包保证数据安全的 D.SqlSessionTemplate是通过ThreadLocal来保证数据安全的
二、简单题
1.介绍下MyBatis的工作原理
2.介绍下MyBatis的插件机制
3.介绍下MyBatis的缓存机制








