【Java进阶营】Java开发工程师最新面试题库系列——Mybatis框架部分(附答案)

【2021最新版】MyBatis面试题总结(38道题含答案解析) 完整版Java面试题地址:【2021最新版】Java面试真题汇总序号内容地址链接1【2021最新版】JavaOOP面试题总结https://blog.youkuaiyun.com/m0_48795607/article/details/1152886732【2021最新版】Java基础面试题总结https://blog.youkuaiyun.com/m0_48795607/article/details/1154851093【2021最新版】多线程&并发面试题总结https://blog.youkuaiyun.com/m0_48795607/ 阅读详情
Mybatis
  1. Mybatis是什么框架?

    答:持久层框架

  2. Mybatis和ORM有什么区别?

    答:ORM是对象关系映射的一种设计理念,也就是对象属性对应数据库字段,让开发人员以操作对象的方式操作数据库数据。Mybatis是基于ORM框架实现的持久层框架,但它并是不完全ORM,Mybatis只是将对象与sql语句关联起来了,而不是与数据库数据关联;

  3. Mybatis为什么是半自动ORM映射?

    答:Mybatis只是将对象与sql语句关联起来了,而不是与数据库数据关联。因此需要手动编写SQL语句,所以是半自动ORM映射。

  4. Mybatis框架的应用场景?

    答:对SQL语句的查询性能要求比较高的地方,例如需要在查询时带上某个索引字段条件,以此来优化查询性能。

  5. Mybatis有哪些优缺点?

    答:

    1.sql语句与代码分离,存放于xml配置文件中:

    优点:便于维护管理,不用在java代码中找这些语句;

    缺点: JDBC方式可以用用打断点的方式调试,但是Mybatis不能,需要通过log4j日志输出日志信息帮助调试,然后在配置文件中修改。

    2.用逻辑标签控制动态SQL的拼接:

    优点:用标签代替编写逻辑代码;

    缺点:拼接复杂SQL语句时,没有代码灵活,拼写比较复杂。不要使用变通的手段来应对这种复杂的语句。

    3.查询的结果集与java对象自动映射:

    优点:保证名称相同,配置好映射关系即可自动映射或者,不配置映射关系,通过配置列名=字段名也可完成自动映射。

    缺点:对开发人员所写的SQL依赖很强。

    4.编写原声SQL:

    优点:接近JDBC,比较灵活。

    缺点:对SQL语句依赖程度很高;并且属于半自动,数据库移植比较麻烦,比如mysql数据库编程Oracle数据库,部分的sql语句需要调整。

  6. Mybatis和Hibernate有什么区别?

    答:

    1、Mybatis是半ORM,Hibernate是全ORM

    2、Mybatis是对JDBC细粒度的封装,SQL语句还是需要开发人员编写。Hibernate是对JDBC粗粒度的封装,完全不需要开发人员编写SQL。在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

    3、Mybatis更加灵活,在SQL语句编写时更好对数据库性能进行优化。Hibernate分装得比较狠,优化SQL困难。

    4、Mybatis移植性相对较差,因为不同的数据库SQL语句是有差异的,Hibernate移植好,不同的数据库采用不同的方言配置即可

    5、Mybatis开发周期长,体现在编写SQL语句和结果集映射,Hibernate开发周期短,能够快速开发。

  7. Mybatis有哪几种SQL编写形式?

    答:

    1、xml静态SQL编写

    2、xml动态SQL编写

    3、注解@Select标记在方法上 编写SQL

  8. Mybatis支持哪些传参的方法?

    答:

    方法1:顺序传参法
    public User selectUser(String name, int deptId);
    
    <select id="selectUser" resultMap="UserResultMap">
        select * from user
        where user_name = #{0} and dept_id = #{1}
    </select>
    
    
    方法2:@Param注解传参法
    public User selectUser(@Param("userName") String name, int @Param("deptId") deptId);
    
    <select id="selectUser" resultMap="UserResultMap">
        select * from user
        where user_name = #{userName} and dept_id = #{deptId}
    </select>
    
    
    方法3:Map传参法
    public User selectUser(Map<String, Object> params);
    
    <select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">
        select * from user
        where user_name = #{userName} and dept_id = #{deptId}
    </select>
    
    
    方法4:Java Bean传参法
    public User selectUser(Map<String, Object> params);
    
    <select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap">
        select * from user
        where user_name = #{userName} and dept_id = #{deptId}
    </select>
    
    
  9. Mybatis的$和#传参的区别?

    答:${}是将参数与sql语句进行字符串拼接,不可避免的会代码SQL注入问题。安全性差,但可以通过一些手段来规避例如:正则表达式过滤不安全字符。#{}是将参数替换成?,之后与PerpardStatement进行SQL预编译的方式进行参数设置.

  10. Mybatis可以映射到枚举类吗?

答:可以,需要自定义对枚举类的类型转换器。例如写一个类为EnumTypeHandler继承BaseTypeHandler<枚举类型>,重写其中的方法,在getNullableResult方法中更具返回结果做响应的转换操作。
  1. Mybatis怎么封装动态SQL?
答:
  1. Mybatis的trim标签有什么作用?
答: trim标记是一个格式化的标记,可以完成set或者是where标记的功能,它的参数有prefix前缀,prefixOverrides匹配前置去除,suffix后缀,suffixOverrides匹配后缀去除
  1. Mybatis怎么实现分页?
答:

1、使用SQL的LIMIT做分页,分页参数可以使用Mybatis提供的Page封装,传给Mapper。然后使用LIMIT (page-1)*size,size方式查询数据

2、使用PageHelper插件实现

3、使用Mybatis的Interceptor拦截器实现
  1. Mybatis的流式查询有什么作用?
答:

**流式查询**指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。

如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。

流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。
  1. Mybatis模糊查询LIKE语句应该怎么写?
答:

1、${%field%}:存在SQL注入问题,不推荐

2、"%"#{field}"%"

3、CONCAT('%',#{field},'%')

4、bind标签了解
  1. Mybatis配置文件中的SQL id是否能重复?
答:同一个namespace下是不能重复的
  1. Mybatis如何防止SQL注入?
答:

1、使用#{}来设置参数

2、正则表达式过滤非法字符
  1. Mybatis如何实现主键回填?
答:使用useGeneratedKeys="true",标识开启主键回填,keyProperty="id"指定主键回填设置到哪一个属性。在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

```
<insert id="insertBook" useGeneratedKeys="true" keyProperty="id">
    insert into t_book (b_name,author) values (#{name},#{author});
</insert>

```
  1. Mybatis使用了哪些设计模式?
答:

1.  Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
2.  工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
3.  单例模式,例如ErrorContext和LogFactory;
4.  代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
5.  组合模式,例如SqlNode和各个子类ChooseSqlNode等;
6.  模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;
7.  适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
  1. Mybatis的缓存机制有什么作用?
答:做服务器的进程内部缓存,提高查询效率,降低数据库访问频率。Mybatis有三种缓存,一级缓存、二级缓存、第三方缓存EhCache,一级缓存时默认开启的,作用域时SqlSession。二级缓存默认关闭需要在配置中使用enableCache="true"开启,二级缓存时namespace作用域的。第三方缓存需要引入额外Jar包,并且在配置中开启二级缓存开关,配置第三方缓存的核心类。
  1. Mybatis一级缓存和二级缓存有什么区别?
答:

image.png

1、作用域不同:

​ 一级缓存的作用域是SqlSession级别的Map,二级缓存是namespace级别的,也叫全局缓存

2、默认配置不同

​ 一级缓存默认开启,二级缓存默认关闭,需要在mybatis.cfg.xml配置文件中开启

```
<settings>
   <setting name="cacheEnabled" value="true"/>
</settings

```
  1. Mybatis-plus和TK-Mybatis是什么框架?
答:Mybatis的增强框架,帮助开发人员更加简化开发。这些框架提供了大部分的简单SQL语句封装的API,提供了分页插件,简化了配置流程。不过只对单表有好的支持,多表关联查询支持差,一般需要手动编写多表的SQL,不过可以原生和增强一起使用。
一文搞定7大流行后端框架:Spring、Netty、MyBatis、Hibernate、Dubbo... 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。 今天给大家分享49篇【后端编程框架】相关精选学习资... 阅读详情

相关推荐

最新Java面试题汇总,看完这些面试文章足够了

十月底十一月将至,2020年已然接近尾声,回顾这一年,经历了太多太多,在这过程中,有点人成功,也有些人频频失败。下面是我对这一年来的面试总结。大家觉得文章不错的,可以点点关注。如果想跟作者交流面试经验以及探讨技术问题,大家也可以扫描尾部二维码添加,暗号【优快云】。 2020年Java最新面试题汇总,希望这些文字对于面试的你们有帮助。 基础面试题 Java面试题-基础篇一 Java面试题-基础篇二 Java面试题-集合框架篇三 Java基础面试题(4) Java基础面试题(5) Java..

AI乔治 3526

MyBatis核心配置相关习题

MyBatis核心配置相关练习

weixin_61025260的博客 2万+

mybatis小练习

对应博主写的一些mybatis文章源代码,都是一些简单在小练习,适合入门用来练手

MyBatis基础知识复习

目 录作业3一.单选题二.填空题三.判断题 作业3 一.单选题 1、MyBatis的删除操作有关说发错误的是()。 A、MyBatis的删除操作在映射文件中是通过配置< delete >元素来实现的 B、MyBatis的删除操作也需要进行事务提交 C、MyBatis的删除操作执行了SqlSession的delete()方法 D、MyBatis的删除操作和添加操作时,也需要封装整个实体类 正确答案: D 2、关于MyBatis模糊查询中进行SQL字符串拼接时,说法错误的是()。 A、使用“${}”

此心安处 9541

mybatis练习

NULL 博文链接:https://tangclimb.iteye.com/blog/967550

mybatis 测试练习项目

mybatis测试项目, 里面常见的增删改查, 包括级联查询都有例子. 版本是v3.2.2 不知道为啥这个所需积分竟然逐步增长了,。。。

MyBatis面试题

MyBatis面试题 填空题 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复? 不同的Xml映射文件,如果配置了namespace,那么id____;如果没有配置 namespace,那么id____; (5分) 正确答案: 可以重复 不能重复 #{}和KaTeX parse error: Expected 'EOF', got '#' at position 1...

CC的博客 5108

JAVA 期末复习试题

JAVA期末复习试题,每一章节都有练习题,包括选择填空,编程等~

2020最新Java工程师面试题-MyBatis篇(附答案)

持续更新内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、 Linux 等技术栈(滴滴滴.会持续更新哦,记得点赞、关注、分享三连击哈). MyBatis 面试题:(关注末尾获取完整答案) 1、什么是 Mybatis...

it小旭博客 1508

60道典型选择题及答案

我费尽力气找的,请望大家多多学习解答,一起共同解开技术难题。

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1546

Java最新字节跳动2024首发485道Java岗面试题(含答案),java开发工程师应届生面试题

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

2401_84692429的博客 721

Power Automate 最常用的十大场景以及解决方案

3.2 获取指定主题含有附件邮件,然后读取csv附件内容,插入数据库,调度执行存储过程,最后通过Power automate 发送paginated report 特殊格式报表给发件人。Power Automate 作为微软推出的自动化工作流工具,其适用场景非常广泛,尤其在数据库查询自动化方面能显著提升效率。2.8发送邮件,把生成csv文件当作附件,把生成html当作邮件内容在邮件boty展示。3.1 读取数据库数据,定时发送预警邮件并抄送附件和展示内容在邮件中。:已有微软产品栈,需快速实现部门级自动化。

qq_24388807的博客 3684

最新不懂看这——Mybatis执行流程源码分析,java高级工程师面试题及答案

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面小编专门为你量身定制了一套针对知识面不够,也莫慌!还有一整套的,可以瞬间查漏补缺全都是一丢一丢的收集整理纯手打出来的。

2401_84692362的博客 1013

告别Godot默认编辑器:手把手教你用VSCode配置C#开发环境(附中文注释避坑指南)

本文详细介绍了如何将VSCode配置为Godot引擎的C#开发环境,提升游戏开发效率。从环境准备、扩展配置到解决中文编码问题,提供完整的避坑指南和高级调试技巧,帮助开发者充分利用VSCode的智能补全和调试功能,打造高效工作流。

weixin_30596023的博客 188

深度学习论文: AnomalyDINO: Boosting Patch-based Few-shot Anomaly Detection with DINOv2

通过将DINOv2模型适应到一次性和少量异常检测中,并专注于工业应用少量异常检测。实验表明,这种方法不仅与现有技术相匹敌,甚至可以在许多设置中超越它们。我们提出的仅视觉方法AnomalyDINO基于补丁相似性,能够实现图像级别的异常预测和像素级别的异常分割。该方法在方法论上很简单,无需训练,因此不需要任何额外的数据进行微调或元学习。

mingo_敏 1902

Java面试题及答案整理(2025年金三银四最新版,持续更新)

对于 Java 后端的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了 BATJ 等大厂的 offer,这个仓库也已经帮助了很多的 Java 学习者,希望也能帮助到你。如果同学们对这份面试题总结有需求,同时也拿到了手中,那么我希望同学们能够经常拿出来刷一刷,饭前刷刷,饭后刷刷,便前刷刷,便后刷刷,多加练习从而形成自己的表达形式,比如说别人问你这个问题,你不用去回忆文档里面的内容就可以脱口而出。

x1ao_fe1的博客 3242

补丁1.0:使用Eviews做ADF检验

补丁1.0:使用Eviews做ADF检验

Jet4505的博客 1961

牛客网最新 Java 面试 1210 道题附答案汇总

以上就是有关程序员面试专题的一些总结,面试不仅考的是技术还有心态,只要你有足够的技术支撑,心态要好,拿到 offer 肯定不在话下。先不要把它想得很困难,自己给自己设置槛!希望大家都可以拿到心仪 offer,走向升职、跳槽、涨薪、赢娶白富美之路!

csdn1234561231的博客 1079

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 282

借助Gemini 3 Pro高效解决课题申报中的五大核心痛点,亲测有效经验分享

之前给大家分享过关于AI辅助课题申报的相关的内容,涵盖了申报书部分撰写技巧,但没针对性拆解各位同仁在实际申报时遇到的卡壳的地方。比如选题范围拿捏不准,定的太大,根本没法落地完成;定的太小,研究价值则体现不了;写综述时,容易单纯罗列文献,缺乏批判性视角,没办法自然融入自己的判断,找不到研究缺口;研究方法部分,可能担心方法设计不够严谨,别人难以复现.....针对这些申报中的高频痛点,接下来七哥会从五个核心要点出发,借助Gemini 3 Pro高效解决这些痛点。

智能AI让学术科研更容易 700

Java 面试题及答案整理(2025年最新版)

本文整理了一套全面的Java面试题集,涵盖MyBatis、Zookeeper、Redis、MySQL等主流技术栈。内容包含Java基础(JDK与JRE区别、==与equals、hashCode)、集合框架(HashMap原理、ArrayList与LinkedList对比)、多线程(并发与并行、线程状态、锁机制)、JVM等核心知识点,并针对常见面试问题如"String是否基础类型"、"抽象类特性"进行了详细解析。此外还涉及IO流、反射机制、动态代理等进阶内容,以及Spr

2401_89221704的博客 1279

SIWAVE仿真PCB操作说明

使用SIWAVE进行PCB仿真提取S参数的操作

sinat_15150363的博客 3061

MyBatis Plus 为啥这么牛?,java面试逻辑题答案

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容![外链图片转存中…(img-CiVIIkya-1711571523148)]小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

547

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java中级开发工程师面试必考20题和参考答案

参考答案定义:反射是指程序运行时获取类的完整结构(属性、方法、构造器),并能动态调用类的成员,突破封装性。应用场景:Spring IOC容器(动态创建Bean)、MyBatis(动态代理生成Mapper)、序列化/反序列化、框架注解解析。性能优化:① 缓存反射获取的Method/Field对象(避免重复获取);② 关闭访问检查(setAccessible(true));③ 优先使用普通调用,仅必要时用反射;④ 用ASM/ByteBuddy等字节码框架替代反射。考察要点:反射原理、实际应用、性能优化思路。

AnalogElectronic的博客 482

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一线互联网大厂最新高质量 Java 面试八股文整理(附答案)

不论是技术经理还是架构师,没有绝对地说哪条路是对还是错,适合自己才是最重要。小公司的可能没有架构师这个概念,大公司的架构师职位又不是那么容易拿下。但不管怎样,不断去学习新的技术,提升自己的层次是很有必要的,无论你在哪一家公司,过硬的技术水平才能吃得开。发布于 2024-04-19 15:04回答了问题 2023-12-12 15:12互联网大厂的 java 面试题有哪些?東方幽静響Java 面试 大家都知道,现在的 Java 面试是越来越难了!主要原因无非是两个: 随着 Java 这个行业的兴起,不管是。

sjkflw121150的博客 1024

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: 【Java进阶营】MyBatis的架构原理
下一篇: 【Java进阶营】Mybatis框架的搭建和基本使用方法
Java进阶营小编
博客等级 码龄5年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值