MyBatis 常见面试题及答案(实战版).docxVIP

MyBatis 常见面试题及答案(实战版).docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

MyBatis常见面试题及答案(实战版)

一、基础概念类

什么是MyBatis?它和JDBC相比有哪些优势?

答案:MyBatis是一款持久层框架,本质是对JDBC的封装,支持自定义SQL、存储过程和ORM映射。对比JDBC的优势:①简化代码(无需手动写Connection、Statement、ResultSet的创建和关闭);②参数绑定和结果映射自动化(避免手动set参数、get结果);③动态SQL灵活拼接(不用拼接字符串避免SQL注入风险);④支持XML/注解两种配置方式,适配不同场景。

MyBatis的核心组件有哪些?各自作用是什么?

答案:核心组件及作用:①SqlSessionFactory:会话工厂,由SqlSessionFactoryBuilder基于配置文件构建,是单例模式;②SqlSession:会话对象,负责执行SQL、管理事务,线程不安全,需用完即关;③Mapper接口:用户定义的DAO接口,MyBatis动态生成代理实现类;④MappedStatement:封装SQL语句、参数类型、结果类型等信息,是XML中select/insert等标签的映射;⑤ResultSetHandler:处理查询结果,将ResultSet转为Java对象。

#{}和${}的区别?实际开发中怎么选?

答案:核心区别在参数解析方式:①#{}是预编译占位符(?),MyBatis会自动转义特殊字符,防止SQL注入,适用于参数传递(如whereid=#{id});②{}是字符串拼接,直接替换变量,**有注入风险**,适用于表名、字段名动态切换(如orderby{field})。实际开发优先用#{},只有动态表名/字段名时才用${},且需手动校验参数合法性。

二、核心原理类

MyBatis是如何实现Mapper接口无实现类却能执行SQL的?

答案:核心是动态代理。①开发者定义的Mapper接口无实现类;②SqlSession调用getMapper(Mapper.class)时,MyBatis通过JDK动态代理生成代理对象;③代理对象拦截接口方法,根据方法名匹配MappedStatement(XML或注解中的SQL配置);④执行SQL并返回结果。简单说:代理对象替我们完成了“找到SQL→执行SQL→封装结果”的过程。

MyBatis的一级缓存和二级缓存有什么区别?怎么使用?

答案:两者都是用于缓存查询结果,减少数据库访问:

一级缓存:①作用域是SqlSession,默认开启;②同一SqlSession中,相同SQL+参数查询会直接从缓存取结果,关闭SqlSession缓存失效;③增删改操作会清空一级缓存(避免数据不一致)。

二级缓存:①作用域是SqlSessionFactory(跨SqlSession),默认关闭;②需手动开启:在MyBatis核心配置文件中设置settingname=cacheEnabledvalue=true/,且Mapper接口/XML中添加cache/标签;③缓存的是序列化后的Java对象,实体类需实现Serializable接口;④增删改操作会清空对应Mapper的二级缓存。

实际使用:二级缓存适合查询频繁、修改少的场景(如字典表),避免缓存一致性问题。

MyBatis的动态SQL有哪些标签?各自用途是什么?

答案:动态SQL是MyBatis核心优势,常用标签:①if:条件判断(如wherename=#{name}仅当name不为空时拼接);②where:自动处理多余的and/or(避免where后直接跟and的语法错误);③choose/when/otherwise:多条件分支(类似Java的switch);④foreach:循环遍历(如in条件:whereidin(#{id}),遍历集合拼接);⑤set:更新语句中自动处理多余的逗号(如setname=#{name},age=#{age}避免末尾逗号);⑥trim:自定义拼接规则(如prefix加前缀、suffixOverrides去掉后缀)。

三、实操细节类

MyBatis如何处理实体类属性和数据库字段名不一致的问题?

答案:三种常用方案:①别名法:SQL中给字段起别名(如selectuser_nameasuserNamefromuser);②配置mapUnderscoreT

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档