Skip to main content

Module result_map

Module result_map 

Source
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

§优势

  1. 多态鉴别器:通过 discriminator 按列值分派到不同 ResultMap
  2. 嵌套映射:association(一对一)+ collection(一对多)支持嵌套
  3. 列前缀:JOIN 查询结果通过列前缀隔离不同实体的列
  4. 原生 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(&registry, "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
多态鉴别器
DiscriminatorCase
多态鉴别器 case
EntityResult
Entity 结果(用于 ResultSetMapping)
FieldResult
实体字段结果
Mapping
单字段映射规则(property <-> column)
NativeQuery
NativeQuery — 原生 SQL + ResultSetMapping
NestedAssociation
一对一嵌套映射(association)
NestedCollection
一对多嵌套映射(collection)
ResultMap
完整结果映射规则
ResultMapRegistry
ResultMap 注册中心(线程安全)
ResultSetMapping
Hibernate @SqlResultSetMapping 风格的结果集映射
ResultSetMappingRegistry
ResultSetMapping 注册中心
RowData
行数据(列名 -> Value)
ScalarResult
标量结果列

Enums§

ResultMapError
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§

ResultSetMappingResult
ResultSetMapping 应用结果类型(entities + scalars)