当前位置: 首页 > news >正文

mybatis热点面试题第五弹

1. MyBatis与Hibernate的区别

答案

  • MyBatis
    • 不完全是一个ORM框架,需要手动编写SQL语句,灵活性高,适合对数据库操作有高性能要求的场景。
    • 缺点是无法做到数据库无关性,如果需要支持多种数据库,需要编写多套SQL映射文件。
  • Hibernate
    • 是一个完整的ORM框架,对象关系映射能力强,数据库无关性好,适合关系模型复杂且对ORM要求高的场景。
    • 缺点是性能可能不如MyBatis,且对SQL的控制不够灵活。

2. 如何解决MyBatis的N+1查询问题?

答案

  • N+1查询问题:在关联查询中,主查询执行一次,每条结果再触发一次关联查询,导致性能问题。
  • 解决方案
    • 使用联合查询:通过JOIN语句一次性查询所有关联数据。
      <select id="selectArticles" resultMap="ArticleResult">
        SELECT a.*, u.*
        FROM article a
        LEFT JOIN user u ON a.author_id = u.id
      </select>
      
    • 使用嵌套查询:在<resultMap>中配置<collection><association>,并指定select属性。

3. MyBatis的动态SQL支持方式有哪些?

答案

  • XML配置方式:通过<if><choose><when>等标签动态拼接SQL。
  • 注解方式:使用@SelectProvider@InsertProvider等注解,结合SqlSession动态生成SQL。
  • #{}${}的区别
    • #{}:预编译占位符,防止SQL注入。
    • ${}:字符串替换,可能导致SQL注入。

4. MyBatis的缓存机制有哪些?

答案

  • 一级缓存:基于PerpetualCacheHashMap本地缓存,作用域为SqlSession,默认开启。
  • 二级缓存:作用域为MapperNamespace),默认不开启,需要在Mapper文件中配置。
    <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
    
  • 缓存更新机制:当执行C/U/D操作后,一级缓存和二级缓存中的相关数据会被清空。

5. 如何优化MyBatis的性能?

答案

  • SQL优化:优化SQL语句,减少不必要的查询和更新。
  • 缓存机制:合理使用一级缓存和二级缓存,减少数据库访问。
  • 批量操作:使用ExecutorType.BATCH模式,减少事务提交次数。
    try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
        for (User user : users) {
            userMapper.insert(user);
        }
        sqlSession.commit();
    }
    
  • 分页插件:使用PageHelper等分页插件,减少数据加载量。

相关文章:

  • Cherno C++ P60 为什么不用using namespace std
  • Golang的图形用户界面设计
  • 网络编程——TCP
  • 微信小程序接入DeepSeek模型(火山方舟),并在视图中流式输出
  • 03 HarmonyOS Next仪表盘案例详解(二):进阶篇
  • 浏览器多实例项目的隔离方案
  • (十 七)趣学设计模式 之 状态模式!
  • 【前端】JavaScript 备忘清单(超级详细!)
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_read_token - 详解(3)
  • 云原生周刊:基于 KubeSphere LuBan 架构打造DeepSeek 插件
  • CSDN博客写作教学(五):从写作到个人IP的体系化构建(完结篇)
  • 【AD】4-8 AD集成库的创建与安装
  • C# 多线程
  • 【JAVA】ThreadPoolTaskExecutor 线程池学习、后端异步、高并发处理
  • 全星 FMEA 软件系统在芯片半导体行业的应用介绍
  • leetcode 56. 合并区间
  • abseil-cpp:环境搭建
  • css3d放置的面板方向不对问题排查
  • 二、QT和驱动模块实现智能家居-----问题汇总1
  • 期权帮|股指期货3月合约交割该如何做?
  • 两次蹚入同一条河,巴萨这一晚被命运抛弃
  • 潘功胜:降准0.5个百分点,降低政策利率0.1个百分点
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 青年与城市共成长,第六届上海创新创业青年50人论坛将举办
  • 南京明孝陵石兽遭涂鸦“到此一游”,景区:已恢复原貌,警方在排查
  • 李公明 | 一周画记:生活就是抵抗