面试官:MyBatis中resultMap的实现原理是什么?彻底懵逼了。。

Mybatis映射器之ResultMap解析 Mybatis映射器之ResultMap解析 在Mybatis映射器之select解析这篇文章最后我们只是简单的介绍了一下ResultMap的使用,而ResultMap功能非常多,他也包含了很多子元素,本篇我们将详细的介绍下。 1. Result Maps概述 resultMap元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets数据提取代码... 阅读详情

在这里插入图片描述

大家好,我是哪吒。

面试的时候,被问到 “MyBatis中resultMap的实现原理是什么?”

我的第一反应就是,resultMap不就是进行自动映射的嘛!还有原理?

MyBatis支持自动映射,可以根据查询结果的列名和Java对象的属性名自动匹配。在使用自动映射时,结果集中的列名会与Java对象的属性名进行匹配,无需在Mapper XML文件中手动配置映射关系,简化了开发。

通过标签配置查询结果集与Java对象之间的映射关系,或者使用指定查询结果映射到的Java对象类型。在insert、update、delete等操作中,也会使用和标签配置参数与SQL语句中的占位符之间的映射关系。

通过TypeHandler实现Java类型和数据库字段类型之间的转换。MyBatis提供了一些内置的TypeHandler,同时也允许用户自定义TypeHandler来处理特定的转换逻辑,确保数据库字段的数据类型正确地映射到Java对象的属性类型。

MyBatis的TypeHandler是一个接口,用于处理Java类型与JDBC类型之间的转换。

当执行SQL语句时,如果语句中包含了参数占位符(如#{param}),MyBatis会使用TypeHandler将Java方法参数的类型转换为JDBC可以理解的SQL类型,以便在数据库操作中使用。

查询数据库后,MyBatis会使用TypeHandler将结果集中的数据从SQL类型转换为Java对象的属性类型,这样就能够将查询结果映射到Java对象上。

TypeHandler主要用于处理单个属性的映射,而resultMap则用于处理整个结果集的映射。

TypeHandler 是用于处理单个Java对象属性与数据库字段之间的映射。它负责将Java对象的属性值转换为JDBC可以理解的类型,以及将查询结果从JDBC类型转换回Java对象的属性类型。这种转换是基于Java类型和JDBC类型之间的映射关系来实现的。

resultMap 是用来定义如何将整个查询结果集映射到Java对象。它提供了更复杂的映射能力,允许开发者自定义如何将数据库列名映射到Java对象的属性上,适用于复杂的数据结构,如关联查询的结果。

再分享几道关于resultMap的问题。

1、当查询结果集包含多个表的联合查询时,如何使用resultMap将这些结果映射到Java对象?

在Mapper XML文件中定义resultMap,将查询结果映射到Java对象上。可以使用元素来处理关联查询的结果,使用元素来处理集合类型的属性。

<resultMap id="userOrderResult" type="com.example.UserOrder">
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <result property="email" column="email"/>
    <collection property="orders" ofType="com.example.Order">
        <id property="orderId" column="order_id"/>
        <result property="productName" column="product_name"/>
        <result property="price" column="price"/>
    </collection>
</resultMap>

在执行查询操作时,引用这个resultMap

<select id="getUserOrders" resultMap="userOrderResult">
    SELECT u.id as user_id, u.username, u.email, o.id as order_id, o.product_name, o.price
    FROM user u
    LEFT JOIN order o ON u.id = o.user_id
    WHERE u.id = #{userId}
</select>

这样,MyBatis就会根据定义的resultMap将查询结果映射到Java对象上,并将这些对象返回给调用者。

2、如何使用MyBatis的resultMap进行分页查询?

在Mapper XML文件中定义resultMap,将查询结果映射到Java对象上。

<resultMap id="userResult" type="com.example.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="email" column="email"/>
</resultMap>

在执行查询操作时,引用这个resultMap。

<select id="getUsersByPage" resultMap="userResult">
    SELECT * FROM user LIMIT #{offset}, #{pageSize}
</select>

其中,#{offset}表示偏移量,即从第几条记录开始查询;#{pageSize}表示每页显示的记录数。

最后,在调用该查询方法时,传入相应的参数即可实现分页查询。例如:

List<User> users = userMapper.getUsersByPage(0, 10); // 获取前10条记录

3、resultMap是如何提高整体性能的?

(1)可重用性

定义好的可以在多个查询语句中重复使用,提高了代码的复用性和维护性。而且,MyBatis还提供了继承的功能,进一步增加了配置的灵活性,使配置的重复利用更加便捷。

(2)二级缓存

可以帮助 MyBatis 识别并利用二级缓存(如与数据库查询结果的缓存),从而提高系统性能,减少对数据库的频繁访问。

(3)减少字段映射错误

通过明确定义,开发人员可以准确地指定查询结果集中的每列数据应该映射到哪个 Java 对象的属性上。这有助于避免因为字段名字或顺序变化而导致的映射错误,从而减少调试和排查错误的时间,提高开发效率。

4、MyBatis是如何实现PreparedStatement的?

MyBatis通过使用JDBC的PreparedStatement来实现预编译的SQL语句。

  1. 获取数据库连接:MyBatis首先需要获取一个数据库连接对象;
  2. 准备SQL语句:MyBatis会将用户传入的参数(如#{xxx})与SQL语句中的占位符(即"?")进行绑定。这个过程称为预编译,它允许MyBatis将参数安全地插入到SQL语句中,防止了SQL注入攻击。
  3. 创建PreparedStatement:MyBatis在执行SQL语句时,会为每次查询创建一个新的PreparedStatement对象。这个对象是JDBC API的一部分,它表示一种预编译的SQL语句,可以提高执行效率和安全性。
  4. 执行SQL语句:MyBatis使用PreparedStatement对象的executeQuery方法来执行SQL查询,并返回结果集。
  5. 处理结果集:MyBatis将结果集转换为Java对象,这个过程可以通过配置的resultMap来完成,它可以将数据库的列映射到Java对象的属性上。
  6. 资源释放:执行完毕后,MyBatis会负责关闭PreparedStatement和Connection等资源,以释放数据库连接。

5、MyBatis如何关闭数据库连接?

(1)连接池

MyBatis通常与连接池一起使用,连接池负责管理数据库连接的创建、分配和释放。当MyBatis需要执行SQL语句时,它会从连接池中获取一个可用的连接,而不是直接创建新的连接。

(2)事务管理

MyBatis提供了事务管理的功能,它会根据配置的事务策略(如提交或回滚)来处理数据库连接的关闭。如果事务提交成功,连接会被返回到连接池中;如果事务回滚,连接可能会被关闭。

(3)资源清理

MyBatis在执行SQL语句后,会负责关闭PreparedStatement和ResultSet等资源,以释放数据库连接。这可以通过配置的资源清理策略来实现,例如使用try-with-resources语句或显式调用close方法。

(4)配置参数

MyBatis的配置参数也会影响数据库连接的关闭行为。例如,可以设置是否自动提交事务、是否缓存查询结果等,这些都会影响连接的关闭时机和方式。

(5)异常处理

MyBatis在执行过程中可能会遇到各种异常,如SQL错误、网络中断等。在这些情况下,MyBatis会根据异常类型来决定如何处理数据库连接,例如重试、回滚或关闭连接。

(6)插件机制

MyBatis还支持插件机制,允许开发者自定义插件来拦截和处理数据库操作。通过插件,可以实现更复杂的资源管理和异常处理逻辑,例如自定义连接池、监控数据库性能等。

6、MyBatis如何管理连接池的?

MyBatis作为一个ORM框架,它本身并不直接管理数据库连接,而是通过配置数据源来实现。

(1)内置连接池

当在MyBatis配置文件中设置时,MyBatis会使用内置的连接池。这个连接池是在MyBatis内部实现的,它会在启动时初始化一定数量的数据库连接,并在需要时提供给MyBatis使用。

(2)第三方连接池

如果需要使用第三方的数据库连接池,如DBCP、C3P0、Druid或Hikari等,可以在MyBatis的配置中进行相应的设置。这些连接池通常提供更好的性能和更丰富的功能,如连接监控和统计等。

(3)UnpooledDataSource

如果不希望使用连接池,可以将数据源类型设置为UNPOOLED。

这种情况下,MyBatis会为每次查询创建一个新的数据库连接,并在查询结束后关闭该连接。

不推荐使用。

(4)事务管理

MyBatis的事务管理也是连接池管理的一部分。当使用事务时,MyBatis会根据事务的开始和结束来控制连接的获取和释放。如果事务成功提交,连接会被返回到连接池中;如果事务回滚,连接可能会被关闭。

(5)资源清理

MyBatis在执行SQL语句后,会负责关闭PreparedStatement和ResultSet等资源,以释放数据库连接。这可以通过配置的资源清理策略来实现,例如使用try-with-resources语句或显式调用close方法。

7、如何理解MyBatis中的资源清理策略?

(1)更新数据时清除缓存

当执行数据更新操作(如INSERT、UPDATE或DELETE)时,应确保相关的缓存被及时清除或更新,以避免脏读或数据不一致的情况发生。

(2)合理配置缓存大小

为了避免缓存占用过多内存,应根据应用的需求和服务器的性能来合理配置缓存的大小和清除策略。

(3)处理缓存并发问题

在并发环境下,需要特别注意缓存可能引起的问题,如脏读或数据不一致。可以通过配置事务隔离级别或者使用乐观锁等机制来减少并发问题的发生。

(4)关闭自动提交

为了防止每次执行SQL语句后都自动提交事务,导致频繁地打开和关闭数据库连接,可以在MyBatis的配置中关闭自动提交功能。

(5)使用合适的资源清理策略

MyBatis提供了不同的资源清理策略,如基于时间、基于空间或基于计数等。选择合适的策略可以帮助有效地管理资源,避免资源泄露。

8、如何在MyBatis中配置资源清理策略?

(1)数据库连接资源管理

MyBatis本身不提供连接池,但可以与第三方连接池整合,比如常用的 c3p0、Druid 等。通过配置连接池的参数,可以控制连接的获取和释放、最大连接数、空闲连接超时等。

(2)缓存资源管理

MyBatis 支持二级缓存,可以在标签中配置二级缓存的属性,包括缓存刷新间隔、缓存过期时间等。

<!-- 开启二级缓存 -->
<cache eviction="FIFO" flushInterval="60000" size="512"/>

(3)开启自动提交

设置在执行查询语句后自动提交事务,这样可以及时释放资源。

<setting name="autoCommit" value="true"/>

(4)使用SqlSessionFactoryBuilder建造者模式

使用 SqlSessionFactoryBuilder 来创建 SqlSessionFactory,在创建完成后对其进行立即销毁操作,这样可以释放资源并避免资源泄露。

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
// 使用 factory 创建 SqlSession
factory.close();

(5)手动释放资源

在使用完毕后,显式调用相关资源的关闭方法,如关闭 SqlSession、清理缓存等。

SqlSession session = sqlSessionFactory.openSession();
// 执行数据库操作
session.close();

3万字80道Java经典面试题总结(2024修订版)- Java基础篇

2 万字 42 道Java经典面试题总结(2024修订版)- Java集合篇

4 万字 102 道Java经典面试题总结(2024修订版)- 多线程篇

10万字208道Java经典面试题总结(2024修订版)- SSM篇


🏆文章收录于:100天精通Java从入门到就业

全网最细Java零基础手把手入门教程,系列课程包括:Java基础、Java8新特性、Java集合、高并发、性能优化等,适合零基础和进阶提升的同学。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

MyBatis ResultSetHandler 结果集的解析过程 该篇讲述了mybatis在执行完数据库后进行结果集的大致解析过程。ResultSetWrapper是对JDBC中的ResultSet对象的封装结果集解析的重点在这个方法中XML中的resultMap可以定义多个映射关系。如果多个结果集对应一个映射关系就需要第四部分(对resultSets标签的处理) 阅读详情

相关推荐

吃透MyBatis底层原理:从JDBC封装到Spring Boot整合实战

MyBatis本质是对JDBC使用模式的标准化封装,其核心在于将SQL执行抽象为SqlSession工作单元、Mapper动态代理与配置驱动的执行链路。理解其原理需回归JDBC原始痛点——参数绑定脆弱、结果映射冗余、资源管理易错,进而掌握SqlSession生命周期、Executor执行器机制及XML与注解双轨制的工程权衡。技术价值体现在提升SQL可治理性、支持插件化横切(如分页/日志)、实现线程安全的数据库会话隔离;典型应用场景包括Spring Boot中多数据源路由、二级缓存集成Redis、动态SQL精

weixin_30437847的博客 399

mybatis中@Results,@ResultMap注解使用

ResultMap注解的使用,

cristianoxm的博客 8010

MyBatis源码与性能优化深度解析:把ORM框架核心讲透,吊打面试官

MyBatis源码与性能优化深度解析 摘要: 本文深入剖析MyBatis ORM框架的核心架构与实现原理。首先介绍了MyBatis的三层架构体系(API层、核心处理层和基础支撑层),详细解析了一次查询请求的完整流程。重点讲解了MyBatis的核心组件,包括SqlSessionFactory、Executor体系(Simple/Reuse/Batch/Caching)、StatementHandler等组件及其职责。文章通过架构图和代码片段展示了SQL执行原理,特别是Executor执行器的设计模式和工作机制

yunque_xianguang的博客 487

mybatis中resultMap的理解

resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来, 并在一些情形下允许你做一些 JDBC 不支持的事情。 实际上,在对复杂语句进行联合映射的时候,它很可能可以代替数千行的同等功能的代码。 ResultMap 的设计思想是,简单的语句不需要明确的结果映射,而复杂一点的语句只需要描述它们的关系就行了。你已...

谦虚使人发胖的博客 2万+

Agent + 监控平台:自动诊断告警根因

根因分析、智能监控、AI Agent、告警风暴、异常检测、可观测性、故障诊断在现代分布式系统中,快速定位和解决问题是维持系统稳定性的关键。传统的监控系统虽然能够生成大量告警,但往往缺乏对告警根因的自动诊断能力,导致运维团队在告警风暴中难以快速定位问题。本文深入探讨了将AI Agent技术与监控平台结合,实现告警根因自动诊断的技术架构、理论基础和实现方法。我们将从第一性原理出发,分析根因诊断问题的本质,介绍基于Agent的智能监控系统设计,并通过实际案例展示其应用价值。文章同时涵盖了从理论到实践的全链路,包括

AIGC应用创新大全的博客 304

ThinkBook 16p 2024 BIOS降压定频实战:从解锁CFG Lock到AC Loadline调优

高性能笔记本在满载时频繁撞上温度墙,通常源于固件层默认电压冗余过大,而系统级降压工具又受限于CFG Lock锁定。要根治问题,需要从BIOS固件层面理解电压管理机制——AC/DC Loadline参数控制着CPU在不同负载下的电压请求,通过修改这些负载线值可以安全降低电压,解锁CFG Lock后还能让XTU、ThrottleStop等软件调参工具恢复可用。这种BIOS级调优在工程实践中广泛用于改善散热、稳定频率、压降风扇噪音,尤其适用于联想ThinkBook 16p 2024与拯救者Y9000P等采用HX平

weixin_32496547的博客 388

mybatis的resultMap用法

resultMap元素是 MyBatis 中最重要最强大的元素。MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。 如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。 而 ResultMap 就是 MyBatis 对这个问题的答案。 代码中会出现大量重复,为了节省时间及空间,类型别名是好帮手。使用它们,就可以不用输入类的全限定名了。在mybatis的全局变量

qq_50896786的博客 7164

WPS JS宏实战:批量调整200个Word表格格式的避坑指南(附完整代码)

本文提供了一份详尽的WPS JS宏实战指南,针对批量调整大量Word表格格式的需求。文章深入解析了如何利用JS宏自动化设置字体、行距和边框,并重点解决了常见的“首行访问报错”等核心难题,附有可直接使用的完整代码,帮助用户显著提升文档处理效率。

weixin_29280219的博客 430

MyBatis08:ResultMap 的结果集映射,面试官问的那些Java原理你都懂吗

1 ResultMap 的结果集映射 1.1 ResultMap 的使用 1.2 多对一的处理 1.2.1 需求 1.2.2 建表 1.2.3 建立实体类 1.2.4 编写对应的 Mapper 接口 1.2.5 编写对应的 Mapper.xml 文件 1.2.6 在 MyBatis 配置文件中绑定对应的 Mapper 接口 1.2.7 利用 ResultMap 实现需求 1.2.8 编写测试类测试 1.3 一对多的处理 1.3.1 需求 1..

m0_63174420的博客 196

基于STM32F407标准库与SimpleFOC实现无刷电机2804位置闭环控制的实战解析

本文详细解析了基于STM32F407标准库与SimpleFOC算法实现2804无刷电机位置闭环控制的实战过程。通过硬件选型、速度闭环调试到位置环PID参数整定,提供了完整的工程实现方案和抗饱和策略,帮助开发者掌握高精度电机控制技术。

oauth7security的博客 918

LQR控制算法调参指南:如何通过Bryson‘s Rule和Trial-and-Error优化自动驾驶性能?

本文深入探讨了LQR控制算法在自动驾驶系统中的调参策略,从Bryson's Rule的基础应用到工程落地的优化方法。通过动态权重适应、非对角项引入和多目标权衡等技巧,提升车辆轨迹跟踪精度与操控舒适性。文章还介绍了数据驱动的调参流程和典型问题的解决方案,为自动驾驶工程师提供实用指南。

kkk56的博客 1024

面试官:Mybatis 是怎么实现字段映射的?

后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,:候选人是否清楚 MyBatis 提供了多种灵活的映射策略(如自动映射、注解、XML ResultMap),以及它们之间的共存与优先级规则。后,通过反射机制,根据一套明确的规则,将结果集中的列数据填充到目标 Java 对象的对应属性中。中的列数据填充到 Java 对象的属性中。,即使列名匹配,映射也会失败,除非你配置了直接字段访问(不推荐,破坏封装)。

犬小哈 585

CST微波工作室端口设置保姆级教程:从波导端口到离散端口,手把手教你搞定S参数仿真

本文提供CST微波工作室端口设置的详细教程,涵盖波导端口和离散端口的选择与配置,助力工程师精准完成S参数仿真。通过微带线滤波器案例,详解端口尺寸、阻抗设置及常见问题排查,提升仿真效率与准确性。

weixin_42570296的博客 362

Mybatis(五)面试官:Mybatis官网这句话你怎么理解?如果这个世界总是这么简单就好了

XML映射文件-结果映射 在实际开发中我们一般情况下,结果映射有以下三种: map作为结果映射 <select id="selectUsers" resultType="map"> select id, username, password from User where id = #{id} </select> resultType作为结果映射 <select id="selectUsers" resultType="User"> select

双非二本自学到互联网公司的成长经历,有故事,有干货。 294

uniapp(全端兼容) - 最新实现全局设置修改字体大小功能,统一修改全部页面所有文字的大小(标准/小/中/大字号切换,用户修改后整个项目立即生效)设置应用字体的大小(详细示例代码,一键复制开箱即用

uni-app,支付宝微信小程序,h5,手机端H5网页,移动端网站,安卓app,ios苹果app,nvue,全局设置字体大小,退出后还能记录字号大小,uniApp将全部页面的字体字号进行修改,uniapp设置改变全局字体大小功能,动态调整应用字体大小,详细教程,动态显示字体大小,可调整显示字体大小,如何解决不同端字体大小的问题,除了rem还有什么方法,设置全局字体大小,用户设置字号大小,应用字体大中小,实现用户全局设置应用字体大小,老年模式字体设置思路,h5端不行怎么办,移动端不生效,修改全局字号,一键改整

✅ 精选推荐文章 8885

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

面试官:说说MyBatis的执行流程!

你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起精进!编辑:业余草https://reurl.cc/g8Dr8Q推荐:https://www...

xmt1139057136的专栏 833

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【吊打面试官系列-MyBatis面试题】MyBatis 实现一对多有几种方式,怎么操作的?

MyBatis 实现一对多有几种方式,怎么操作的?

java1234的博客 251

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深入MyBatis源码:从核心原理到插件机制,掌握ORM框架精髓

在Java后端开发中,ORM框架是连接应用与数据库的关键桥梁,其核心在于将对象模型与关系型数据库进行高效、灵活的映射。MyBatis作为一款主流的持久层框架,通过其清晰的架构设计,实现了SQL与Java代码的解耦,让开发者能够以声明式的方式操作数据库。理解其底层原理,如动态SQL的生成机制、缓存的实现策略以及插件的扩展点,对于构建高性能、可维护的数据访问层至关重要。这些机制不仅关系到应用的执行效率,也直接影响到复杂业务场景下的开发体验。例如,通过分析**插件(Plugin)** 的动态代理实现,可以深入理解

weixin_34269583的博客 392

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【大白话说Java面试题 第138题】【05_Mybatis篇】第8题:MyBatis 的分页原理是什么?

MyBatis分页原理解析 核心原理 MyBatis分页分为逻辑分页(RowBounds)和物理分页两种方式: 逻辑分页:先查询全量数据到内存,通过Java代码截取结果集,存在OOM风险,仅适用于小数据量场景。 物理分页:通过SQL语句(如LIMIT)直接限制返回数据量,减少传输和内存占用,是生产环境推荐方案。 PageHelper插件实现 底层机制:基于MyBatis的Interceptor插件,拦截StatementHandler.prepare()方法,动态改写SQL。 执行流程: 通过ThreadL

Java后端 | AI智能体应用实战派 | 电脑技能行家 516

《Java 100 天进阶之路》第90篇:MyBatis面试高频真题(2026版)

本文整理2026一线大厂高频32道MyBatis完整面试题,覆盖基础概念、核心SQL配置、Mapper动态代理源码、缓存机制、Spring整合、MyBatis-Plus源码级考点六大模块。附带SQL执行流程图 + 生产环境避坑表 + 课后面试练习题。全文无废话,面试前直接背诵!

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 4612

【吊打面试官系列-MyBatis面试题】MyBatis 实现一对一有几种方式?具体怎么操作的?

MyBatis 实现一对一有几种方式?具体怎么操作的?

java1234的博客 278

面试官:给我说说你使用Mybatis的过程中遇到过哪些坑?

大多数开发者应该都使用过Hibernate或者Mybatis的框架,或多或少都踩过一些坑!如在MyBatis/Ibatis中#和$的区别?#方式能够很大程度防止sql注入,$方式无法防止Sql注入。所以,老司机 对新手说,最好用#。简单的说#{}是经过预编译的,是安全的,而解决一些实际问题。如在执行sql语句时你有时并不希望让变量进行处理,而是直接赋值执行,这时就要用到(${a})了,在使用时还要...

weixin_33897722的博客 530

【大白话说Java面试题 第139题】【05_Mybatis篇】第9题:MyBatis 是否支持一对一、一对多的关联查询?如何实现?

MyBatis支持一对一、一对多关联查询,通过association和collection标签实现。具体有两种方式: 联合查询(JOIN):一次性查询多表数据,性能最优,但需注意列名冲突和结果集去重。 嵌套查询(分步查询):先查主表,再根据外键查关联表,可能引发N+1问题(查询列表时多次访问数据库),可通过延迟加载(fetchType="lazy")优化。 关键点: 一对一用association,一对多用collection。 联合查询适合关联数据频繁使用,嵌套查询适合按需加载。 避免N+1问题,可通过批

Java后端 | AI智能体应用实战派 | 电脑技能行家 499

mybatis映射器组件

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

q16974058的博客 712
上一篇: 华为OD机试 - 结队编程(Java 2024 C卷 100分)
下一篇: 华为OD机试 - 无重复字符的元素长度乘积的最大值(Java 2024 C卷 100分)
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2953原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值