dapper_style/
dapper_style.rs1use torm::{Database, Model, Query};
12
13#[derive(Debug, Clone, Model)]
15#[model(table_name = "users")]
16pub struct User {
17 pub id: i64,
18 pub name: String,
19 pub email: String,
20 pub age: i32,
21}
22
23impl User {
24 fn new(name: &str, email: &str, age: i32) -> Self {
25 Self {
26 id: 0, name: name.to_string(),
28 email: email.to_string(),
29 age,
30 }
31 }
32}
33
34#[tokio::main]
35async fn main() -> Result<(), Box<dyn std::error::Error>> {
36 let db = Database::sqlite(":memory:").await?;
37
38 db.auto_migrate::<User>().await?;
40 println!("表 users 已自动创建\n");
41
42 println!("=== 1. Insert (自增主键自动回填) ===");
44 let mut alice = User::new("Alice", "alice@example.com", 25);
45 db.create(&mut alice).await?;
46 let mut bob = User::new("Bob", "bob@example.com", 17);
47 db.create(&mut bob).await?;
48 let mut carol = User::new("Carol", "carol@example.com", 30);
49 db.create(&mut carol).await?;
50 println!(
51 " id 自动分配: Alice={} Bob={} Carol={}\n",
52 alice.id, bob.id, carol.id
53 );
54
55 println!("=== 2. Query (自动映射回 User) ===");
57 let adults: Vec<User> = Query::new("users")
58 .where_gte("age", 18)
59 .order_by_desc("age")
60 .query(&db)
61 .models::<User>()
62 .await?;
63 for u in &adults {
64 println!(" id={} name={} email={} age={}", u.id, u.name, u.email, u.age);
65 }
66
67 let first_two: Vec<User> = Query::new("users")
69 .where_gt("age", 0)
70 .order_by_asc("id")
71 .limit(2)
72 .query(&db)
73 .models::<User>()
74 .await?;
75 println!(" 前 2 条: {:?}", first_two.iter().map(|u| &u.name).collect::<Vec<_>>());
76 println!();
77
78 println!("=== 3. Update ===");
80 let affected = db.update(&mut alice, &[("age", 26)]).await?;
81 println!(" 更新 age 影响 {} 行", affected);
82
83 db.update(
85 &mut alice,
86 &[("email", "alice_new@example.com"), ("name", "Alice A.")],
87 )
88 .await?;
89
90 let refreshed: User = db.first::<User>(&alice.id.to_string()).await?.unwrap();
92 println!(
93 " 更新后: name={} age={} email={}\n",
94 refreshed.name, refreshed.age, refreshed.email
95 );
96
97 println!("=== 4. Delete ===");
99 let removed = db.delete(&mut bob).await?;
100 println!(" 删除 Bob 影响 {} 行", removed);
101 let remaining = db.all::<User>().await?;
102 println!(" 剩余 {} 条: {:?}", remaining.len(), remaining.iter().map(|u| &u.name).collect::<Vec<_>>());
103
104 println!("\n✅ insert / query / update / delete 全程零 SqlValue,Dapper 风格完成!");
105 Ok(())
106}