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

MyBatis深度面试指南之三

一、XML映射文件进阶标签

1. 核心辅助标签
标签作用示例
<resultMap>自定义结果集映射规则<resultMap id="userMap" type="User"> <id property="id" column="user_id"/>
<sql>定义可重用的SQL片段<sql id="baseColumn">id,name,age</sql>
<include>引用SQL片段SELECT <include refid="baseColumn"/> FROM users
<selectKey>获取非自增主键值支持order="BEFORE/AFTER"获取序列值
<parameterMap>参数映射(已废弃,推荐内联参数)
2. 动态SQL九大标签
<!-- 条件分支示例 -->
<select id="findUser">SELECT * FROM users<where><if test="name != null">AND name LIKE CONCAT('%',#{name},'%')</if><choose><when test="age != null">AND age = #{age}</when><otherwise>AND status = 1</otherwise></choose><foreach item="id" collection="ids" open="AND id IN (" separator="," close=")">#{id}</foreach></where>
</select>

作用范围<if>, <choose>/<when>/<otherwise>, <trim>, <where>, <set>, <foreach>, <bind>


二、XML文件ID重复问题

命名空间(namespace)是关键

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper"><select id="selectById">...</select>
</mapper><!-- AdminMapper.xml -->
<mapper namespace="com.example.AdminMapper"><select id="selectById">...</select> <!-- 允许相同id -->
</mapper>
  • 无namespace:ID直接作为Map键值,重复导致覆盖
  • 有namespace命名空间+ID构成唯一键(如 com.example.UserMapper.selectById

三、半自动ORM vs 全自动ORM

特性MyBatis (半自动)Hibernate (全自动)
SQL控制需手动编写SQL自动生成HQL
关联查询需配置<association>/<collection>对象导航自动加载关联
性能优化精准控制SQL,避免N+1问题需解决N+1查询问题
灵活性支持复杂SQL和存储过程对复杂SQL支持较弱
核心区别:MyBatis将对象映射自动化,但SQL生成需手动控制

四、

相关文章:

  • 数据结构1 ——数据结构的基本概念+一点点算法
  • Java Optional 详解:优雅处理空指针异常
  • 【Docker基础】Docker容器管理:docker stats及其参数详解
  • 【笔记】 Docker目录迁移脚本
  • centos指令
  • 现代串口通讯UI框架性能对比
  • 机器人磁性夹具如何选?IXTUR气控永磁铁 MAP/MRP/LI-120系列负载能力与适用场景解析
  • 开源项目推荐:MCP Registry——管理MCP服务器的利器
  • Vue.js 中的 v-model 和 :value:理解父子组件的数据绑定
  • Python 可迭代的对象、迭代器 和生成器(何时使用生成器表达式)
  • Linux基本指令篇 —— more指令
  • Linu压缩解压
  • 平台组成-报表平台
  • 从台式电脑硬件架构看前后端分离开发模式
  • FPGA设计的用户约束
  • 基于微信小程序的旅游景点推荐设计与实现
  • PG靶机复现 Squid
  • ARM64 linux系统的一般执行过程
  • ​​Git提交代码Commit消息企业级规范
  • Qwen VLo :一个多模态统一理解与生成模型