MyBatis 高级应用考试题及答案讲解_第1页
MyBatis 高级应用考试题及答案讲解_第2页
MyBatis 高级应用考试题及答案讲解_第3页
MyBatis 高级应用考试题及答案讲解_第4页
MyBatis 高级应用考试题及答案讲解_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MyBatis高级应用考试题及答案讲解考试时间:______分钟总分:______分姓名:______一、单项选择题1.MyBatis中一级缓存的生命周期是()A.与SqlSession生命周期一致B.与Mapper接口生命周期一致C.与Application生命周期一致D.一直存在2.关于MyBatis的二级缓存,以下说法正确的是()A.默认是开启的B.需要在Mapper.xml中配置<cache>标签C.同一个Mappernamespace下的不同SqlSession可以共享D.如果执行了增删改操作,二级缓存会自动清空3.在MyBatis中,处理一对多关联关系时,推荐使用()方式,因为它只执行一次SQL查询。A.嵌套查询B.嵌套结果映射4.MyBatis的动态SQL中,用于判断参数是否存在且不为空的标签是()A.<if>B.<choose>C.<when>D.<foreach>5.关于MyBatis拦截器,以下说法正确的是()A.拦截Executor接口B.拦截StatementHandler接口C.拦截ParameterHandler接口D.拦截ResultSetHandler接口6.自定义类型处理器需要继承BaseTypeHandler类,必须实现的方法不包括()A.setNonNullParameterB.getNullableResultC.getResultD.setParameter7.在MyBatis中,如果实体类的属性名与数据库字段名不一致,通常通过()来解决。A.resultTypeB.resultMapC.parameterMapD.@Param注解8.以下哪个标签用于在XML中定义可复用的SQL片段()A.<sql>B.<include>C.<fragment>D.<reuse>9.MyBatis中,事务的传播行为是指当一个事务方法被另一个事务方法调用时,事务如何传播,默认的事务传播行为是()A.REQUIREDB.REQUIRES_NEWC.SUPPORTSD.NOT_SUPPORTED10.关于MyBatis的批量插入,以下描述正确的是()A.使用SqlSession的insert方法循环调用B.使用SqlSession的insert方法配合foreach标签C.使用SqlSession的insert方法一次性插入D.以上都可以二、多项选择题1.关于MyBatis的一级缓存,以下说法正确的是()A.一级缓存是SqlSession级别的B.同一个SqlSession中查询相同数据会直接从缓存获取C.在SqlSession调用close()或clearCache()方法后,一级缓存失效D.在同一个SqlSession中,执行了增、删、改操作后,一级缓存会自动清空2.MyBatis插件可以拦截的方法包括()A.Executor(update,query,commit,rollback)B.StatementHandler(prepare,parameterize,batch,update,query)C.ParameterHandler(getParameterObject,setParameters)D.ResultSetHandler(handleResultSets,handleOutputParameters)3.MyBatis的动态SQL标签包括()A.<if>B.<choose>C.<where>D.<foreach>E.<trim>4.自定义类型处理器BaseTypeHandler需要实现的抽象方法有()A.setNonNullParameterB.getNullableResultC.setParameterD.getResult5.MyBatis处理复杂映射的方式包括()A.使用嵌套查询B.使用嵌套结果映射C.使用关联对象D.使用集合对象三、简答题1.在MyBatis中,如何实现一对多关联映射?请列举两种方式,并简述其优缺点。2.什么是MyBatis的插件机制?请简述其工作原理。3.请简述MyBatis中一级缓存和二级缓存的区别。四、代码实操题1.假设数据库中存储的状态字段是字符'Y'或'N',而实体类中对应的是布尔类型boolean。请编写一个自定义类型处理器`YnTypeHandler`,继承`BaseTypeHandler<Boolean>`,实现将数据库中的'Y'/'N'转换为true/false,以及将true/false转换为'Y'/'N'存入数据库。2.给定以下Mapper接口方法:```javaList<User>selectUserByCondition(@Param("name")Stringname,@Param("age")Integerage);```请使用MyBatis的动态SQL编写对应的XML映射文件片段,实现当name不为空时查询name,当age不为空时查询age,且name和age之间是AND关系。试卷答案一、单项选择题1.A解析:MyBatis的一级缓存是基于SqlSession实现的,其生命周期与SqlSession相同。当调用SqlSession的close()方法时,一级缓存会被销毁。2.B,C,D解析:MyBatis的二级缓存是Mapper(或命名空间)级别的,必须手动在Mapper.xml中配置`<cache>`标签才能开启;同一个Mapper下的不同SqlSession可以共享二级缓存;执行增、删、改操作后,二级缓存会自动清空以保持数据一致性。A选项错误,二级缓存默认是关闭的。3.B解析:嵌套结果映射(NestedResultMap)通过在SQL中一次性查询出所有数据并映射到结果集中,避免了N+1查询问题,性能较好;嵌套查询(NestedQuery)需要执行多次SQL,性能较差。4.A解析:`<if>`标签用于根据条件判断是否包含某段SQL内容;`<choose>`、`<when>`、`<otherwise>`相当于Java的switch-case语句,用于实现多选一的条件判断。5.A,B,C,D解析:MyBatis插件机制允许拦截Executor(执行器)、StatementHandler(处理器)、ParameterHandler(参数处理器)、ResultSetHandler(结果集处理器)这四大核心接口的方法。6.C解析:`BaseTypeHandler`提供了`getResult`方法的默认实现(通常调用`getNullableResult`),因此不需要手动重写。必须手动实现的是`setNonNullParameter`和三个`getNullableResult`重载方法。7.B解析:当实体类属性名与数据库字段名不一致时,可以使用`resultMap`通过`<result>`标签进行显式映射;`resultType`只能进行简单的类型匹配,无法处理复杂映射。8.A解析:`<sql>`标签用于定义可复用的SQL片段;`<include>`标签用于引用`<sql>`定义的片段;`<fragment>`不是MyBatis的标签。9.A解析:MyBatis默认的事务传播行为是`REQUIRED`,表示当前方法如果没有事务,就新建一个事务;如果有,就加入当前事务。10.B解析:MyBatis中实现批量插入最标准的方式是在XML中使用`<foreach>`标签配合`SqlSession`的`insert`方法,将多条数据作为参数传入。二、多项选择题1.A,B,C,D解析:这四项描述均正确。一级缓存是SqlSession级别的,同一次会话查询相同数据直接走缓存;调用close或clearCache会清空缓存;执行增删改操作会清空缓存。2.A,B,C,D解析:MyBatis插件可以拦截上述四大核心接口的方法,从而实现对SQL执行过程的干预。3.A,B,C,D,E解析:`<if>`、`<choose>`、`<where>`、`<foreach>`、`<trim>`都是MyBatis动态SQL的核心标签。4.C解析:`BaseTypeHandler`已经实现了`setNull`和`setParameter`方法,且`getResult`方法也是实现的。只有`setNonNullParameter`和`getNullableResult`系列方法是抽象方法,需要用户重写。5.A,B解析:MyBatis处理一对多映射主要依靠“嵌套查询”和“嵌套结果映射”两种方式。三、简答题1.答案:*方式一:嵌套查询**实现:*在`<resultMap>`中使用`<collection>`标签的`select`属性,指定另一个Mapper方法查询子表数据。**优点:*逻辑清晰,代码易于理解。**缺点:*会导致N+1查询问题(性能较差),频繁访问数据库。*方式二:嵌套结果映射**实现:*在`<resultMap>`中使用`<collection>`标签,直接在SQL中使用`LEFTJOIN`进行关联查询,一次性查询出所有数据。**优点:*只执行一次SQL查询,性能较好。**缺点:*SQL语句编写复杂,字段较多时XML容易变得臃肿。2.答案:MyBatis插件机制允许开发者通过拦截器来拦截Executor、StatementHandler、ParameterHandler和ResultSetHandler这四个核心接口的方法调用。其工作原理是基于JDK动态代理(Proxy),当调用插件拦截的方法时,实际上调用的是代理对象的方法,代理对象会先执行插件自己的逻辑(如日志、权限校验),然后再委托给目标对象执行,或者修改参数/结果集后再委托执行。3.答案:*作用域不同:一级缓存是SqlSession级别的,不同SqlSession之间不共享;二级缓存是Mapper(或命名空间)级别的,同一个Mapper下的不同SqlSession可以共享。*生命周期不同:一级缓存的生命周期与SqlSession一致,关闭即销毁;二级缓存的生命周期通常与应用程序或Mapper接口绑定,除非手动清除。*配置方式不同:一级缓存默认开启;二级缓存需要手动在Mapper.xml中配置`<cache>`标签并开启。四、代码实操题1.答案:```javapackagecom.example.handler;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;importjava.sql.CallableStatement;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassYnTypeHandlerextendsBaseTypeHandler<Boolean>{@OverridepublicvoidsetNonNullParameter(PreparedStatementps,inti,Booleanparameter,JdbcTypejdbcType)throwsSQLException{//将Boolean转换为'Y'或'N'存入数据库ps.setString(i,parameter?"Y":"N");}@OverridepublicBooleangetNullableResult(ResultSetrs,StringcolumnName)throwsSQLException{Stringresult=rs.getString(columnName);return"Y".equalsIgnoreCase(result);//将'Y'转换为true}@OverridepublicBooleangetNullableResult(ResultSetrs,intcolumnIndex)throwsSQLException{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论