121 lines
3.4 KiB
Rust
121 lines
3.4 KiB
Rust
use crate::models::user::User;
|
|
use mysql::params;
|
|
use mysql::prelude::Queryable;
|
|
use r2d2::Pool;
|
|
use r2d2_mysql::MySqlConnectionManager;
|
|
|
|
pub struct UserRepository<'a> {
|
|
pub pool: &'a mut Pool<MySqlConnectionManager>,
|
|
}
|
|
|
|
impl<'a> UserRepository<'a> {
|
|
pub fn new(pool: &'a mut Pool<MySqlConnectionManager>) -> UserRepository {
|
|
UserRepository { pool }
|
|
}
|
|
|
|
/**
|
|
* 新建用户
|
|
*/
|
|
pub fn create_user(&mut self, user: &User) -> Result<(), mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
conn.exec_drop(
|
|
r"INSERT INTO users (id, name, age, email, password) VALUES (:id, :name, :age, :email, :password)",
|
|
params! {
|
|
"id" => &user.id,
|
|
"name" => &user.name,
|
|
"age" => &user.age,
|
|
"email" => &user.email,
|
|
"password" => &user.password,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* 删除用户
|
|
*/
|
|
pub fn delete_user(&mut self, user: &User) -> Result<(), mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
conn.exec_drop(
|
|
r"DELETE FROM users WHERE id = :id",
|
|
params! {
|
|
"id" => &user.id,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* 更新用户
|
|
*/
|
|
pub fn update_user(&mut self, user: &User) -> Result<(), mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
conn.exec_drop(
|
|
r"UPDATE users SET name = :name, age = :age, email = :email, password = :password WHERE id = :id",
|
|
params! {
|
|
"id" => &user.id,
|
|
"name" => &user.name,
|
|
"age" => &user.age,
|
|
"email" => &user.email,
|
|
"password" => &user.password,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* 查询所有用户
|
|
*/
|
|
|
|
pub fn query_all_user(&mut self) -> Result<Vec<User>, mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
conn.query_map(
|
|
"SELECT id, name, age, email, password FROM users",
|
|
|(id, name, age, email, password)| User {
|
|
id,
|
|
name,
|
|
age,
|
|
email,
|
|
password,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* 根据ID查询用户
|
|
*/
|
|
pub fn query_user_by_id(&mut self, id: i32) -> Result<Option<User>, mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
let result: Option<User> = conn.exec_first(
|
|
"SELECT id, name, age, email, password FROM users WHERE id = :id",
|
|
params! {
|
|
"id" => id,
|
|
},
|
|
)?;
|
|
Ok(result)
|
|
}
|
|
|
|
/**
|
|
* 根据用户名查询用户
|
|
*/
|
|
pub fn query_user_by_name(&mut self, name: &str) -> Result<Option<User>, mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
conn.exec_first(
|
|
"SELECT id, name, age, email, password FROM users WHERE name = :name",
|
|
params! {
|
|
"name" => name,
|
|
},
|
|
)
|
|
}
|
|
|
|
/**
|
|
* 根据邮箱查询用户
|
|
*/
|
|
pub fn query_user_by_email(&mut self, email: &str) -> Result<Option<User>, mysql::Error> {
|
|
let mut conn = self.pool.get().unwrap();
|
|
conn.exec_first(
|
|
"SELECT id, name, age, email, password FROM users WHERE email = :email",
|
|
params! {
|
|
"email" => email,
|
|
},
|
|
)
|
|
}
|
|
}
|