mybatis的orm映射是显式配置驱动的,非自动猜测;通过resulttype或resultmap将sql结果集字段绑定到java对象属性,依赖typehandler类型转换和反射机制,且每条sql必须明确配置映射规则。

MyBatis 的 ORM 映射不是全自动“猜出来”的,而是靠显式配置驱动的映射过程。它不试图替代 SQL,而是把 SQL 执行结果和 Java 对象之间搭起一条可配置、可追踪的转换通道。
映射本质是字段到属性的显式绑定
MyBatis 不会自动把数据库字段 user_name 对应到 Java 属性 userName,除非你明确告诉它怎么映射。这种绑定有两种主流方式:
-
resultType:指定返回对象类型,MyBatis 内部会基于该类自动生成一个“内联 ResultMap”,要求字段名(或别名)与属性名严格匹配(支持驼峰自动转换,但依赖开启
mapUnderscoreToCamelCase=true) -
resultMap:手动定义映射规则,用
<id></id>和<result></result>标签逐个声明字段(column)与属性(property)的对应关系,适用于字段名/属性名不一致、嵌套对象、集合关联等复杂场景
映射发生在 SQL 执行之后的结果处理阶段
MyBatis 的 ORM 映射不是在 SQL 构建时发生的,而是在 JDBC 查询返回 ResultSet 后,由 ResultSetHandler 调用 ResultMap 完成的。整个流程是:
- 执行 SQL 得到原始结果集
- 根据配置的
ResultMap(或由resultType推导出的默认ResultMap)遍历每一列 - 通过反射调用 setter 方法或设置字段值,完成从
ResultSet到 Java 对象的填充
这意味着:SQL 写得对不对、字段是否查出来、别名是否写准,直接决定映射能否成功。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
映射配置是每个 SQL 语句的必需项
没有 resultType 或 resultMap,MyBatis 就不知道该怎么封装结果——它不会抛异常说“找不到类”,而是直接报错:A query was run and no Result Maps were found。这说明:
- ORM 映射不是全局生效的“约定”,而是每条
<select></select>标签的独立配置 - 即使用了注解方式(如
@Select),也必须配合resultType或@Results显式声明映射逻辑 - 一对多、一对一等关联映射,也是通过
<association></association>和<collection></collection>在ResultMap中层层嵌套定义的
映射能力依赖 TypeHandler 和反射机制
真正把数据库类型(如 VARCHAR、DATE)转成 Java 类型(如 String、LocalDateTime)的是 TypeHandler。MyBatis 内置了常用类型处理器,也允许自定义。同时,整个对象实例化和属性赋值过程依赖 Java 反射——所以实体类需有无参构造器,属性建议提供 public setter 方法(或使用 Lombok 的 @Data)。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










