当前位置: 首页 > 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 aLEFT 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等分页插件,减少数据加载量。
http://www.lryc.cn/news/546310.html

相关文章:

  • KTransformers部署 使671B DeepSeek R1成「办公桌标配」
  • sql-labs less5-8
  • 一个大型应用的云原生一般有多少个服务?
  • Linux下安装VS Code
  • 【零基础到精通Java合集】第一集:Java开发环境搭建
  • Rocky Linux 系统安装 typecho 个人博客系统(Docker 方式)
  • C++-第二十一章:特殊类设计
  • pytorch 模型测试
  • 在kali linux中kafka的配置和使用
  • 代码规范和简化标准
  • 基于SpringBoot的校园二手交易平台(源码+论文+部署教程)
  • 【51单片机】快速入门
  • YOLOv8+QT搭建目标检测项目
  • 刷题记录10
  • 数学软件Matlab下载|支持Win+Mac网盘资源分享
  • 5G学习笔记之BWP
  • Spark 介绍
  • mac Homebrew安装、更新失败
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化
  • http的post请求不走http的整个缓存策略吗?
  • c++ 预处理器和iostream 文件
  • 【前端】前端设计中的响应式设计详解
  • 探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(二)
  • 打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题
  • 6.人工智能与机器学习
  • RabbitMQ怎么实现延时支付?
  • vite-vue3使用web-worker应用指南和报错解决
  • 校园快递助手小程序毕业系统设计
  • python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源
  • BIO、NIO、AIO、Netty从简单理解到使用