本篇博客我們來聊聊MySQL數據庫的連接與操作。如果你本地沒有MySQL數據庫的話,需要你先安裝MySQL數據庫。在Mac OS中使用brew包管理器進行MySQL的安裝是及其方便的。安裝MySQL的命令為:brew install mysql。本篇博客我們就要使用Perfect框架來連接操作數據庫了,首先我們需要創建一個測試數據庫,然后在測試數據庫中創建一張測試表用來增刪改查操作。
在博客的開頭呢,先來推薦一款Mac上比較好用又免費的MySQL可視化管理工具Sequel Pro。這款工具用的是相當的順手呢,應用的圖標如下所示:
一、測試數據庫的創建
本部分與Perfect框架無關,完全是MySQL的內容,是Perfect操作數據庫的准備工作。前提是你已經安裝好了MySQL數據庫了。
1、啟動MySQL的服務器
這一點雖然簡單,但不要忘記啟動你的MySQL服務呢,不然Sequel Pro是無法連接你的MySQL數據庫的。具體啟動方式如下。
啟動是start,那么關閉MySQL數據庫就是stop了,如下所示:
2.使用Sequel Pro連接操作數據庫
(1)、連接MySQL數據庫
打開Sequel Pro,輸入你MySQL的主機名,用戶名以及密碼。具體連接那個數據庫可以不選,然后填上具體的端口,默認是3306。點擊連接即可。具體如下所示:
(2)、創建測試數據庫
然后點擊添加數據庫,創建新的數據庫即可,下方我們創建的是test數據庫,編碼方式用的是utf8。如下所示。
(3)、創建user表
創建完數據庫后,接下來我們要創建一個user表用來進行測試。點擊左下方的加號來創建新的數據庫表,下方就是我們創建的數據庫表的具體步驟以及具體的參數配置。如下所示:
創建完user表后,我們需要往表里邊添加一些測試字段,下方就是我們添加的一些字段。在我們的user表中有下方四個字段,id是主鍵,用戶的唯一標示。username-用戶名,password-用戶密碼,create_time是創建時間,create_time的類型是時間戳,而且默認值是當前時間。具體如下所示。
二、Perfect數據庫連接
萬事俱備只欠東風,上面准備完MySQL數據庫后,我們就要開始進行Perfect框架連接數據庫的內容了。
1.引入依賴庫
依照慣例,Perfect框架連接數據庫依然需要包的支持。首先我們需要引入操作MySQL相關的包。
//MySql數據庫依賴包
.Package(url: "https://github.com/PerfectlySoft/Perfect-MySQL.git",
majorVersion: 2, minor: 0)
下方是添加完上述的依賴包后,重新進行編譯的結果:
2、數據庫連接
下方代碼段中的MySQLConnnet類就負責數據庫的連接並且選擇相應的數據庫。下方是MySQLConnnet類的整體結構,host,port,user,password都是只讀的計算屬性,負責配置連接數據庫的參數。而mysql屬性就是連接數據庫后的操作句柄。下方主要有兩個方法,一個是連接數據庫的方法connectDataBase()和選擇數據庫的方法selectDataBase()。MySQLConnnet類對外是以單例的形式存在的,不過對外暴漏的不是MySQLConnnet類的對象,而是MySQL類的對象。
接下來給出具體的代碼實現,下方就是MySQLConnnet類的單例和私有構造器。具體實現如下所示:
下方是數據庫的連接,核心語句就是下方紅框中的內容。主要還是調用MySQL類中的connect()方法,在調用該方法時傳入相應的參數即可。如果連接失敗了會返回相應的errorMessage。具體代碼如下所示:
連接完數據庫后,然后是選擇數據庫,下方是選擇數據庫的代碼。使用mysql句柄調用selectDataBase()方法,具體代碼如下所示:
三、數據庫操作
接下來我們就要調用上面的數據庫操作類類操作具體數據庫中的表了。在第一部分我們已經創建好了test數據庫,並且創建好了相應的user表。接下來我們就要使用Swift代碼來對User表進行增刪改查操作了。
1.構建數據庫操作基類
下方截圖就是我們構建的數據庫操作的基類,所有數據庫表的操作都要繼承自該基類,在基類中定義了操作數據庫的名字dataBaseName,MySQL操作句柄mysql,以及響應json的格式responsJson。具體如下所示。
2.構建user表的操作類
下方的UserOperator類就是我們創建的專門來操作user表的類,主要是對user表的增刪改查操作。insertUserInfo()負責“增”,即插入用戶信息。deleteUser()負責“刪”,通過userId來刪除用戶。updateUserInfo()就負責“改”,更新用戶信息。queryUserInfo()就負責“查”了,負責從user表中通過用戶名來查詢信息。
(1)、InsertUserInfo()----"增"
下方就是插入數據的具體代碼,第一個框就是我們要執行的SQL語句,然后使用mysql操作句柄調用query()方法進行SQL語句的執行。執行成功后,查詢插入的數據並返回查詢的結果,如下所示。
(2)、deleteUserInfo()----"刪"
接下來我們來看一下刪除的具體操作,下方截圖就是deleteUserInfo()的具體實現。下方的方法與插入差不多,先給出delete的SQL語句,然后再調用mysql操作句柄的query()操作,具體代碼如下所示:
(3)、updateUserInfo----更新用戶信息
下方是更新用戶信息的代碼,與上兩個代碼差不多,只不過是通過mysql操作句柄調用query()方法執行的是update的SQL語句。更新時我們使用了MySQL的now()函數來更新時間,具體代碼如下所示。
(4)、queryUserInfo----查詢
接着我們來實現一下查詢用戶信息的代碼。下方就是查詢用戶信息的代碼,查詢的代碼稍微復雜一些,在執行完查詢的SQL語句后,還需要價格查詢結果進行存儲。在存儲后,會返回查詢的結果results。我們可以通過results的forEachRow()函數的尾隨閉包來獲取每行的數據。在取出數據后,將其轉換成相應的字典,然后將存有查詢結果的字典存入到responseJson中,然后將responseJson轉換為json字符串返回給用戶即可。具體做法如下所示。
四、測試用例
上面我們寫完操作User表的相應的方法后接下來我們就來測試一些具體的結果。為了方便測試,我們配置4個路由專門用來對User表的增刪改成進行操作。每個路由對應着上面每個方法。本部分就給出相應的測試用例。為了方便測試,我們在路由配置時,指定請求方法全是GET請求。
1、對“增”的測試
接下來我們對InsertUserInfo()的的測試,首先我們添加一個請求方式為GET的“/create”路由,然后獲取用戶提交的userName和password。獲取完畢后,調用UserOperator對象的insertUserInfo()方法將數據插入到數據庫中。當然插入后,會接着將數據查詢出來返回給客戶端的。
我們在瀏覽器里訪問“http://127.0.0.1:8181/create?userName=Hellow&password=1234”這個地址,就會將用戶Hellow,密碼為1234的用戶插入到數據庫。當然我們故意將Hello寫成了Hellow稍后進行更新。下方就是具體的操作結果:
2.對“改”的測試
接下來我們就要測試一下updateUserInfo()這個函數,該部分與上述的代碼差不多,也是需要配置一個請求方式為GET的更新路由“/update”。然后在該路由中獲取請求參數,然后調用updateUserInfo()這個函數即可。具體代碼就不做過多贅述了,直接看下方的測試結果吧。通過結果不難看出,用戶名被修改成正確的Hello了,而且時間也被更新了。
剩下的查與刪,和上方的示例差不多,在此就不做過多贅述了,我們的MySQL數據庫的操作就先聊到這吧。官方上還介紹了一些數據庫的ORM操作,其中就有MySQL的ORM操作,可以簡化一些數據操作。這一點就留給讀者自己去看吧。