版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MyBatis笔试真题(含详细答案)说明:本套试题贴合Java后端企业真实面试、笔试场景,涵盖MyBatis基础、核心原理、动态SQL、缓存、关联查询、常见坑点等核心考点,题型全面,答案通俗易懂,适合求职复习、岗位考核使用。一、单项选择题(10题)1.以下关于MyBatis的描述,错误的是()A.MyBatis是一款优秀的持久层框架B.MyBatis封装了JDBC,简化了数据库操作代码C.MyBatis完全自动化实现ORM,无需手动编写SQLD.MyBatis支持自定义SQL、存储过程和高级映射答案:C解析:MyBatis属于半自动ORM框架,核心优势是灵活可控,需要开发者手动编写SQL语句;全自动ORM框架(如Hibernate)可无需手写SQL,因此C错误。2.MyBatis的核心配置文件默认名称是()A.mybatis-config.xmlB.mybatis.xmlC.application.xmlD.sqlmap-config.xml答案:A解析:MyBatis官方默认核心配置文件名为mybatis-config.xml,是项目全局配置文件,用于配置环境、映射文件、参数设置等。3.以下不属于MyBatis核心组件的是()A.SqlSessionFactoryB.SqlSessionC.ConnectionD.Mapper答案:C解析:MyBatis四大核心组件为SqlSessionFactory、SqlSession、Executor、Mapper。Connection是JDBC原生数据库连接对象,不属于MyBatis自定义核心组件。4.MyBatis中,用来实现动态拼接SQL、避免SQL语法错误的关键字是()A.ifB.whereC.foreachD.trim答案:B解析:<where>标签会自动去除条件前多余的and/or,自动处理空条件,避免手动拼接SQL出现语法报错;if仅做条件判断,foreach用于循环遍历,trim为自定义截取标签。5.关于MyBatis一级缓存,说法正确的是()A.全局缓存,所有SqlSession共享B.默认关闭,需要手动开启C.基于SqlSession级别,默认开启D.缓存数据永久有效答案:C解析:一级缓存是SqlSession级别的本地缓存,默认开启,仅当前会话有效,会话关闭、提交、回滚或执行增删改操作后缓存会清空,且不同SqlSession无法共享缓存数据。6.MyBatis中resultType和resultMap的区别,说法错误的是()A.resultType用于简单数据类型、实体类、集合映射B.resultMap支持字段与属性名不一致映射、关联查询映射C.复杂多表关联查询必须使用resultMapD.resultType可以完全替代resultMap答案:D解析:resultType只能实现简单的字段属性自动映射,无法处理字段属性名不一致、一对一/一对多关联嵌套查询,不能替代resultMap。7.以下标签中,用于MyBatis批量插入、批量查询遍历参数的是()A.<if>B.<foreach>C.<choose>D.<set>答案:B解析:<foreach>标签专门用于遍历集合、数组参数,常用于批量增删、in条件查询场景。8.MyBatis二级缓存的作用域是()A.SqlSession级别B.Mapper命名空间级别C.单个方法级别D.全局项目级别答案:B解析:二级缓存是Mapper(namespace)级别的缓存,多个SqlSession可以共享同一Mapper的二级缓存数据,默认关闭,需手动配置开启。9.在MyBatis中,想要动态更新字段,避免多余逗号,优先使用的标签是()A.<where>B.<set>C.<trim>D.<update>答案:B解析:<set>标签专门适配update语句,可自动去除更新语句末尾多余的逗号,适配动态字段更新场景。10.MyBatis中#{}和${}的核心区别,说法正确的是()A.#{}是字符串直接拼接,${}是预编译占位B.#{}可防止SQL注入,${}无法防止C.两者功能完全一致,可随意替换D.${}默认会给参数加单引号答案:B解析:#{}为预编译占位符,底层使用JDBCPreparedStatement,参数会被自动转义,杜绝SQL注入;${}为字符串直接拼接,无预编译机制,存在严重SQL注入风险,且不会自动添加引号。二、填空题(5题)1.MyBatis操作数据库的核心会话对象是________。答案:SqlSession2.MyBatis实现实体类属性和数据库字段名不一致映射,可通过________或________两种方式实现。答案:resultMap映射、全局驼峰命名开启(mapUnderscoreToCamelCase)3.MyBatis动态SQL中,多条件多选一的分支判断标签组合是________、________、________。答案:choose、when、otherwise4.开启MyBatis二级缓存,需要在核心配置文件设置________,并在Mapper映射文件中添加________标签。答案:cacheEnabled=true、<cache/>5.使用MyBatis获取自增主键,MySQL环境下可通过________属性和________属性实现。答案:useGeneratedKeys、keyProperty三、简答题(6题,核心高频面试题)1.简述MyBatis的执行流程答案:1.加载MyBatis核心配置文件和Mapper映射文件,解析所有配置信息;2.通过SqlSessionFactoryBuilder构建SqlSessionFactory工厂对象,工厂会初始化配置环境、映射规则、缓存机制等;3.由SqlSessionFactory创建SqlSession数据库会话对象;4.SqlSession通过Mapper接口代理对象,调用对应的SQL方法;5.MyBatis底层通过Executor执行器,完成SQL预编译、参数赋值、数据库交互;6.接收数据库返回结果,通过映射规则封装为Java实体对象,返回给业务层;7.关闭SqlSession会话,释放数据库连接资源。2.详细说说#{}和${}的区别及使用场景答案:(1)原理区别:#{}是预编译占位符,底层基于PreparedStatement,会对参数进行转义处理;${}是直接字符串拼接,底层基于Statement,无参数转义。(2)安全区别:#{}可以彻底防止SQL注入攻击,安全性高;${}存在SQL注入风险,不安全。(3)语法区别:#{}会自动为字符串、日期类型参数添加单引号;${}直接拼接参数原值,不会添加任何符号。(4)使用场景:-日常参数查询、新增、修改,优先使用#{};-动态排序、动态表名、动态字段等无需引号的场景,只能使用${},且必须手动校验参数,防止注入。3.MyBatis一级缓存和二级缓存的区别答案:对比维度一级缓存二级缓存作用域SqlSession会话级别Mapper命名空间级别开启状态默认开启,无需配置默认关闭,需手动配置共享性会话私有,不共享所有SqlSession共享同一Mapper缓存清空时机会话关闭、提交、增删改操作清空手动清空、项目重启、缓存过期清空补充:日常开发中,一级缓存适用于单次会话重复查询场景;二级缓存适合高频查询、低频修改的静态数据场景。4.MyBatis中<trim>标签的作用,以及和where、set标签的关系答案:trim是自定义修剪标签,通用性最强,可自定义前缀、后缀、需要去除的多余字符。核心作用是动态拼接SQL时,手动剔除多余的and、or、逗号等符号,解决SQL语法报错问题。关系:1.<where>和<set>都是trim标签的特殊封装版;2.<where>等价于trim前缀去除and/or,无后缀去除;3.<set>等价于trim后缀去除逗号,适配更新语句;4.简单条件查询用where、动态更新用set,复杂自定义SQL修剪场景使用trim。5.简述MyBatis一对一、一对多关联查询的实现方式及注意事项答案:(1)一对一查询:使用resultMap中的<association>标签,适用于用户-用户详情、订单-用户等一对一场景。(2)一对多查询:使用resultMap中的<collection>标签,适用于用户-订单列表、分类-商品列表等一对多场景。注意事项:1.一对多映射时,实体类对应属性必须是集合类型(List、Set);2.关联查询需配置正确的主键、外键关联字段,避免数据匹配错误;3.避免多表嵌套关联过多,防止出现N+1查询问题,可通过联表查询、延迟加载优化;4.关联映射必须使用resultMap,无法使用resultType。6.什么是MyBatis的N+1查询问题?如何解决?答案:问题描述:执行关联查询时,先查询出N条主表数据(1次SQL),再循环每条主表数据,分别查询对应的从表数据(N次SQL),最终执行1+N次SQL,数据库查询压力大,性能低下。解决方案:1.联表查询(优先):通过leftjoin/innerjoin单条SQL一次性查询主从表所有数据,彻底避免多次查询;2.开启延迟加载:全局配置lazyLoadingEnabled=true,仅在使用关联数据时才查询从表,减少无效查询;3.批量查询:通过in语句批量查询从表数据,将N次查询优化为1次查询。四、实操编程题(企业高频)题目:使用MyBatis动态SQL实现用户条件分页查询需求:根据用户名(模糊查询)、状态(精准查询)、创建时间区间查询用户数据,动态拼接条件(参数为空则不拼接),支持分页,编写完整Mapper接口、MapperXML文件。答案:1.Mapper接口代码java
publicinterfaceUserMapper{
//条件分页查询用户
List<User>selectUserByCondition(@Param("username")Stringusername,
@Param("status")Integerstatus,
@Param("startTime")StringstartTime,
@Param("endTime")StringendTime,
@Param("offset")Integeroffset,
@Param("pageSize")IntegerpageSize);
}2.MapperXML映射文件xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.mapper.UserMapper">
<selectid="selectUserByCondition"resultType="com.entity.User">
SELECTid,username,status,create_timeFROMsys_user
<where>
<!--用户名模糊查询-->
<iftest="username!=nullandusername!=''">
ANDusernameLIKECONCAT('%',#{username},'%')
</if>
<!--状态精准查询-->
<iftest="status!=null">
ANDstatus=#{status}
</if>
<!--创建时间起始-->
<iftest="startTime!=nullandstartTime!=''">
ANDcreate_time>=#{startTime}
</if>
<!--创建时间结束-->
<iftest="endTime!=nullandendTime!=''">
ANDcr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026余压发电项目开发流程与关键成功因素研究
- 2026企业服务行业运营模式研究及数字化转型策略
- 2026人工智能算法优化与金融风控模型开发研究方案
- 2026人工智能医疗应用领域现状与发展潜力评估报告
- 2026人事中介机构劳务派遣法律关系雇佣关系差异现代化调研
- 部编版杭州市第一中学高三语文第8单元复习题及答案
- 山东省济南市第二中学七年级英语第3章测试卷及答案
- 天津市河西区实验小学九年级化学下册溶液知识点巩固习题及答案
- 2026年浙江省杭州市第一中学七年级英语第11单元课后练习题及答案
- 2025年江西省高安市高一历史上册期末考试真题及完整答案(考点梳理)
- 2026秋 教科版(2024新版)六年级科学上册 全册教案(核心素养版)
- 英语A级高频词汇
- 2026全国第二届班组长大赛(国防赛道)初赛理论参考题库(含答案)
- 2026 年脑梗死溶栓治疗护理配合流程课件
- 高中化学人教版选择性必修2 能层与能级 基态与激发态 原子光谱(解析版)课时训练
- 2026版ADA糖尿病诊疗标准指南
- 心存善念行有准则小学主题班会课件
- 胸腔积液患者的胸腔穿刺术后护理
- T-ACEF 216-2025 燃煤锅炉尿素脱硝优化控制系统技术导则
- 城镇燃气调压箱故障应急处置措施
- 住房城乡建设执法试题及答案
评论
0/150
提交评论