域名 AXUM.RS 将于 2025 年 10 月到期。我们无意再对其进行续费,如果你有意接续这个域名,请与我们取得联系。
  • AXUM.RS 现仅需人民币 3000 元(大写:叁仟元整。接受适度议价
  • 按照行业规则,AXUM.RS 到期后,大概率会进入长时间的赎回期,该期间内,如果你想拥有该域名,将要付出高额的费用
  • 我们已启用 AXUM.EU.ORG 域名,并将持续运营
  • 仅接受微信或支付宝交易
如果你对 AXUM.RS 有兴趣,请和我们进行联系:

内容介绍

  • 掌握 rust 过程宏的编写
  • 实现对数据模型结构体的 CRUD Derive宏
    • 实现 CRUD,基于 sqlx
    • 实现自定义表名、主键及是否为视图
    • 实现某些字段跳过插入
    • 实现某些字段跳过更新
    • 实现查找单条记录的过滤条件,并可指定过滤条件是使用 ILIKE 进行模糊查询,还是使用 = 进行精确匹配。
    • 实现记录列表的过滤条件,并可指定过滤条件是使用 ILIKE 进行模糊查询,还是使用 = 进行精确匹配。
    • 实现分页

预览

User 为例,将自动为其生成以下方法:

/// 插入
User::insert<'a>(&self, e: impl sqlx::PgExecutor<'a>) -> sqlx::Result<String>;

/// 更新
User::update<'a>(&self, e: impl sqlx::PgExecutor<'a>) -> sqlx::Result<u64>;

/// 查找单条
User::find<'a>(e: impl sqlx::PgExecutor<'a>, f:&UserFindFilter) -> sqlx::Result<Option<Self>>;

/// 列表
User::list_data<'a>(e: impl sqlx::PgExecutor<'a>, f:&UserListFilter) -> sqlx::Result<Vec<Self>>;

/// 统计
User::list_count<'a>(e: impl sqlx::PgExecutor<'a>, f:&UserListFilter) -> sqlx::Result<i64>;

/// 分页
User::list(p: &sqlx::PgPool, f:&UserListFilter) -> sqlx::Result<UserPaginate<Self>>;

/// 删除
User::list_count<'a>(e: impl sqlx::PgExecutor<'a>, id:&String) -> sqlx::Result<u64>;

以及配套的数据结构:

pub enum UserFindBy {
    Id(String),
    Email(String),
}

pub struct UserFindFilter {
    pub by: UserFindBy,
}

pub struct UserListFilter {
    pub page: u32,
    pub page_size: u32,
    pub email: Option<String>,
    pub nickname: Option<String>,
}

pub struct UserPaginate {
    pub page: u32,
    pub page_size: u32,
    pub total: u32,
    pub total_page: u32,
    pub data: Vec<User>,
}
要查看完整内容,请先登录