内容介绍

目标

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

本专题使用的是 PostgreSQL 数据库,并未对其它数据库做兼容处理。

预览

#[derive(Db)]
#[db(table = "users", pk = "id")]
pub struct User {
    #[db(find)]
    pub id: String,
    
    #[db(find)]
    #[db(list_opt)]
    #[db(opt_like)]
    pub email: String,
    
    pub password: String,
    
    #[db(list_opt)]
    #[db(opt_like)]
    pub nickname: String,
    
    #[db(skip_update)]
    pub dateline: chrono::DateTime<chrono::Local>,
}

#[derive(Db)]
#[db(table = "messages", pk = "id")]
pub struct Message {
    #[db(find)]
    #[db(skip_insert)]
    pub id: i32,
    
    #[db(list_opt)]
    #[db(skip_update)]
    pub user_id: String,
    
    #[db(list_opt)]
    #[db(opt_like)]
    pub content: String,
    
    #[db(skip_update)]
    pub dateline: chrono::DateTime<chrono::Local>,
    
}

#[derive(Db)]
#[db(table = "v_user_messages", pk = "user_id, message_id", is_view)]
pub struct UserMessage {
    #[db(list_opt)]
    #[db(opt_like)]
    pub email: String,
    
    #[db(list_opt)]
    #[db(opt_like)]
    pub nickname: String,
    
    #[db(find_opt)]
    #[db(list_opt)]
    pub message_id: i32,
    
    #[db(find_opt)]
    #[db(list_opt)]
    pub user_id: String,
    
    #[db(list_opt)]
    #[db(opt_like)]
    pub content: String,
    
    pub dateline: chrono::DateTime<chrono::Local>,
}

以及配套的数据结构:

要查看完整内容,请先登录