Skip to main content

Module lambda

Module lambda 

Source
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 Column trait

§优势

  1. 编译期字段名检查:拼写错误直接编译失败
  2. IDE 自动补全UserColumns:: 后可补全所有字段
  3. 重构友好:字段重命名后所有引用处编译失败,便于定位修改
  4. 表名隔离:不同 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§

LambdaWrapper
Lambda 类型安全查询构造器
OrderBy
排序子句

Enums§

OrderDirection
排序方向
WhereClause
WHERE 条件子句(内部表示)

Traits§

Column
字段标记 trait