diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..892e055
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://122.152.201.90:9912/test_server
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
new file mode 100644
index 0000000..56782ca
--- /dev/null
+++ b/.idea/sqldialects.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
index bb0c478..75f3b69 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -698,6 +698,8 @@ dependencies = [
"actix-web",
"bcrypt",
"mysql",
+ "r2d2",
+ "r2d2_mysql",
"serde",
"serde_derive",
"uuid",
@@ -1742,6 +1744,27 @@ dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r2d2"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93"
+dependencies = [
+ "log",
+ "parking_lot",
+ "scheduled-thread-pool",
+]
+
+[[package]]
+name = "r2d2_mysql"
+version = "25.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93963fe09ca35b0311d089439e944e42a6cb39bf8ea323782ddb31240ba2ae87"
+dependencies = [
+ "mysql",
+ "r2d2",
+]
+
[[package]]
name = "radium"
version = "0.7.0"
@@ -1931,6 +1954,15 @@ dependencies = [
"windows-sys 0.59.0",
]
+[[package]]
+name = "scheduled-thread-pool"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19"
+dependencies = [
+ "parking_lot",
+]
+
[[package]]
name = "scopeguard"
version = "1.2.0"
diff --git a/Cargo.toml b/Cargo.toml
index 5406498..4682d55 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,6 +5,8 @@ edition = "2021"
[dependencies]
mysql = "25.0.1"
+r2d2 = "0.8.10"
+r2d2_mysql = "25.0.0"
actix-web = "4"
serde = "1.0"
serde_derive = "1.0"
diff --git a/src/repositories/user_repository.rs b/src/repositories/user_repository.rs
index fced02c..3ded52e 100644
--- a/src/repositories/user_repository.rs
+++ b/src/repositories/user_repository.rs
@@ -1,109 +1,120 @@
use crate::models::user::User;
use mysql::params;
use mysql::prelude::Queryable;
+use r2d2::Pool;
+use r2d2_mysql::MySqlConnectionManager;
-/**
- * 新建用户
- */
-pub fn create_user(conn: &mut mysql::PooledConn, user: &User) -> Result<(), mysql::Error> {
- 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 struct UserRepository<'a> {
+ pub pool: &'a mut Pool,
}
-/**
- * 删除用户
- */
-pub fn delete_user(conn: &mut mysql::PooledConn, user: &User) -> Result<(), mysql::Error> {
- conn.exec_drop(
- r"DELETE FROM users WHERE id = :id",
- params! {
- "id" => &user.id,
- },
- )
-}
+impl<'a> UserRepository<'a> {
+ pub fn new(pool: &'a mut Pool) -> UserRepository {
+ UserRepository { pool }
+ }
-/**
- * 更新用户
- */
-pub fn update_user(conn: &mut mysql::PooledConn, user: &User) -> Result<(), mysql::Error> {
- 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 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 query_all_user(conn: &mut mysql::PooledConn) -> Result, mysql::Error> {
- conn.query_map(
- "SELECT id, name, age, email, password FROM users",
- |(id, name, age, email, password)| User {
- id,
- name,
- age,
- email,
- 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,
+ },
+ )
+ }
-/**
- * 根据ID查询用户
- */
-pub fn query_user_by_id(
- conn: &mut mysql::PooledConn,
- id: i32,
-) -> Result