Expand description
ResultMap 高级映射 + Native Query + ResultSetMapping
对应文档 6.8 节改进项 30(ResultMap 高级映射)+ 42(Native Query + ResultSetMapping)。
§核心概念
- ResultMap:声明式结果映射规则(id property + result property + association + collection + discriminator)
- ResultSetMapping:Hibernate
@SqlResultSetMapping风格,原生 SQL 的结果映射 - NativeQuery:原生 SQL + ResultSetMapping 引用
- ResultMapRegistry:注册中心,按 id 索引
- RowData:行数据(列名 -> Value)
§设计灵感
- MyBatis
resultMap(最强大的 resultMap 模型,支持 discriminator 多态、association/collection 嵌套) - Hibernate
@SqlResultSetMapping(JPA 标准) - Doctrine
ResultSetMappingBuilder
§优势
- 多态鉴别器:通过 discriminator 按列值分派到不同 ResultMap
- 嵌套映射:association(一对一)+ collection(一对多)支持嵌套
- 列前缀:JOIN 查询结果通过列前缀隔离不同实体的列
- 原生 SQL:NativeQuery 可执行任意 SQL 并通过 ResultSetMapping 映射
§使用示例
use sz_orm_core::result_map::{
ResultMap, Mapping, NestedAssociation, ResultMapRegistry, RowData, apply_result_map,
};
use sz_orm_core::Value;
use std::collections::HashMap;
// 1. 注册 ResultMap
let mut registry = ResultMapRegistry::new();
let mut dept_map = ResultMap::new("deptMap", "Dept");
dept_map.add_id_mapping(Mapping::new("id", "dept_id"));
dept_map.add_result_mapping(Mapping::new("name", "dept_name"));
registry.register(dept_map);
let mut user_map = ResultMap::new("userMap", "User");
user_map.add_id_mapping(Mapping::new("id", "user_id"));
user_map.add_result_mapping(Mapping::new("name", "user_name"));
user_map.add_association(NestedAssociation::new("dept", "deptMap"));
registry.register(user_map);
// 2. 构造 JOIN 查询结果行
let mut columns = HashMap::new();
columns.insert("user_id".to_string(), Value::I64(1));
columns.insert("user_name".to_string(), Value::String("Alice".to_string()));
columns.insert("dept_id".to_string(), Value::I64(10));
columns.insert("dept_name".to_string(), Value::String("Engineering".to_string()));
let row = RowData::new(columns);
// 3. 应用 ResultMap 映射
let result = apply_result_map(®istry, "userMap", &row).unwrap();
assert_eq!(result.get("id"), Some(&Value::I64(1)));
assert_eq!(result.get("name"), Some(&Value::String("Alice".to_string())));Structs§
- Discriminator
- 多态鉴别器
- Discriminator
Case - 多态鉴别器 case
- Entity
Result - Entity 结果(用于 ResultSetMapping)
- Field
Result - 实体字段结果
- Mapping
- 单字段映射规则(property <-> column)
- Native
Query - NativeQuery — 原生 SQL + ResultSetMapping
- Nested
Association - 一对一嵌套映射(association)
- Nested
Collection - 一对多嵌套映射(collection)
- Result
Map - 完整结果映射规则
- Result
MapRegistry - ResultMap 注册中心(线程安全)
- Result
SetMapping - Hibernate
@SqlResultSetMapping风格的结果集映射 - Result
SetMapping Registry - ResultSetMapping 注册中心
- RowData
- 行数据(列名 -> Value)
- Scalar
Result - 标量结果列
Enums§
- Result
MapError - ResultMap 错误
Functions§
- apply_
result_ map - 应用 ResultMap 规则到单行,返回属性 HashMap
- apply_
result_ map_ many - 应用 ResultMap 到多行,处理 collection 聚合
- apply_
result_ set_ mapping - 应用 ResultSetMapping 到单行,返回 (entity_attrs_vec, scalar_values_vec)
- apply_
result_ set_ mapping_ many - 应用 ResultSetMapping 到多行
Type Aliases§
- Result
SetMapping Result - ResultSetMapping 应用结果类型(entities + scalars)