Expand description
Lambda 类型安全 Wrapper
对应文档 6.8 节改进项 38(Lambda 类型安全 Wrapper)。
§核心概念
- Column:字段标记 trait,关联 Model 类型 M,提供字段名与表名
LambdaWrapper<M>:类型安全的查询构造器,所有字段引用都通过Column类型而非&str- define_columns!:宏,为 Model 定义所有字段的类型安全标记
§设计灵感
- MyBatis-Plus
LambdaQueryWrapper/LambdaUpdateWrapper - JOOQ 类型安全 DSL
- Diesel 强类型 schema
- SeaORM
Columntrait
§优势
- 编译期字段名检查:拼写错误直接编译失败
- IDE 自动补全:
UserColumns::后可补全所有字段 - 重构友好:字段重命名后所有引用处编译失败,便于定位修改
- 表名隔离:不同 Model 的字段不会混淆
§使用示例
use sz_orm_core::lambda::{LambdaWrapper, Column};
use sz_orm_core::define_columns;
use sz_orm_core::Value;
// 1. 定义 Model(示例)
struct User;
// 2. 为 User 定义字段标记
define_columns! {
UserColumns for User table = "users" {
Id => "id",
Name => "name",
Age => "age",
}
}
// 3. 使用 LambdaWrapper 构造类型安全查询
let mut wrapper = LambdaWrapper::<User>::new("users");
wrapper
.select(UserColumns::Id)
.select(UserColumns::Name)
.eq(UserColumns::Id, Value::I64(1))
.gt(UserColumns::Age, Value::I64(18));
let sql = wrapper.build_select();
assert!(sql.contains("SELECT `id`, `name`"));
assert!(sql.contains("FROM `users`"));
assert!(sql.contains("`id` = 1"));
assert!(sql.contains("`age` > 18"));Structs§
- Lambda
Wrapper - Lambda 类型安全查询构造器
- OrderBy
- 排序子句
- Soft
Delete Config - 软删除配置
- Tenant
Config - 多租户配置
Enums§
- Order
Direction - 排序方向
- Where
Clause - WHERE 条件子句(内部表示)
Traits§
- Column
- 字段标记 trait