Beego框架學習筆記02--Beego與資料庫操作雜記
1.資料庫重登入相關
每次關閉電腦或者關閉資料庫伺服器之後,如果想要再次操作資料庫就必須開啟資料庫伺服器。
具體過程是先執行【~/$ mysql.server start】指令,得到資料庫伺服器啟動成功提示。
MacBook-Pro:~$ mysql.server start
Starting MySQL
SUCCESS!
然後再執行【~/$ mysql -uroot -p】指令使用管理員身份登入資料庫,當然這個時候需要輸入管理員賬號密碼才能下一步。老規矩管理員密碼在輸入的時候不會顯式載入,直接放心輸入然後回車就行。
MacBook-Pro:~$ mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.12 Homebrew Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
如果看到mysql>這個東西的時候,就表示可以繼續對資料庫進行操作了。
(ps:退出資料庫指令是quit,今天聽到一位同學告訴我資料庫終端沒有退出指令,只能關終端來退出資料庫...我沉默了好一會)
2.IDE開啟go工程相關
我們已經知道建立工程的終端命令【~/ $ bee new 工程名】必須在workspace的src路徑下執行,但是我們使用IDE開啟工程的時候卻必須要以worksapce為工程開啟,否則會出現包因為沒有在整個工程中而導致導包失敗。下面是典型的錯誤例子:
正確開啟方式應當是使用GOPATH對應的workspace來開啟IDE工程
這雖然不是什麼深奧的問題,但是的確作為初學者的我在這裡摔了個不大不小的跟頭。姑且標記一下,留待提醒後人。
3.終端建立資料庫指令
在寫筆記01的時候我一直認為使用orm可以不用手動建立資料庫,而是註冊別名建立連結的時候orm自動幫著建立一個數據庫。但是事實上orm只是一個輔助操作資料庫的工具(類似於PHP中的PDO這樣,僅僅只是用來建立連結和操作),所以資料庫還是必須先被創建出來之後,才能通過orm去連結和操作。因此我們還需要通過終端指令【create database 資料庫名 charset=utf8;】來建立資料庫。
ps:那個終端指令的分號不是要換行寫,而是我手一抖回車按快了。寫在一行直接執行就行。
4.ORM 建立連結default別名唯一
特殊強調:orm建立資料庫連結時default別名必須唯一,否則會出現連結衝突error導致操作失敗。這個唯一指的是在同一個workspace下只能有一個貌似。我目前測試的結果是這樣,不過可能測試方法還存在問題。不過姑且記下來。
5.重定向redirect與渲染tplname區別
重定向語法:tempController.Redirect(“跳轉到某頁面路徑”,“狀態碼”)
第一個引數表示跳轉到某個頁面的路徑,重定向方法在成功執行的時候會從當前連結自動對這個地址發起一次get請求。
第二個引數表示自動發起的這次請求的狀態碼(statusCode)
1xx 請求成功,請繼續傳送. 常見狀態碼100
2xx 請求成功 常見狀態碼200
3xx 請求資源轉移,需跳轉. 常見狀態碼302
4xx 請求錯誤 常見狀態碼404 400
5xx 服務端錯誤 常見狀態碼500
tplname語法:tempController.TplName = "xxx.html"
對TplName所賦的值就是前端將要重新渲染的頁面檔案。
至於區別簡單說就是使用redirect重定向能夠讓請求變更,tplname只是頁面重新渲染一下而請求不發生變化。
詳細來說就是
1)請求完成後重定向redirect能夠變更位址列,而渲染tplname則不會變更位址列資訊
2)重定向redirect會進行兩次請求,第一次請求獲取新地址和狀態碼,第二次跳轉新地址請求
而渲染tplname只能夠進行一次請求,即請求返回組裝的新頁面,直接在當前地址渲染。
3)直接展示頁面或者展示錯誤資訊時(即需要傳資料)使用渲染tplname,而需要頁面發生跳轉的時候使用重定向redirect
6.資料庫儲存相關
資料庫一般只儲存圖片路徑而不是儲存圖片本身,哪怕是將圖片進行二進位制編碼後再儲存也不會。因為圖片相較於文字等其他資料型別而言佔用的空間相對較大,資料庫入庫出庫的頻寬卻是有限的資源。資料庫顯然不能將有限的資源統一向某一個服務傾斜,因為這樣必然導致其他服務的卡頓甚至停擺(例如雙11,春運搶票),因此限制對資料庫傳輸資料的型別就十分有必要。所以資料庫中儲存一般只存圖片路徑,而不會存圖片本身。
7.資料庫單表常見屬性設定
(1)主鍵設定
orm會自動將名稱為Id、型別是int的字預設設定為主鍵,主鍵採用自增結構。而我們可以通過在欄位後新增【`orm:"pk”;auto`】修飾來指定任意欄位為主鍵。當然主鍵的自增樣式決定主鍵只針對於int型別。
(2)時間設定
與mysql資料庫內部時間型別不同,go語言中時間型別只有一種time.Time(在time包中規定的)。我們可以在orm欄位後新增兩種不同的時間修飾來表明他們的作用
·欄位表示建立檔案時儲存一次:欄位 time.Time `orm:"type(datetime);auto_now"`
·欄位表示修改檔案時次次儲存:欄位 time.Time `orm:"type(datetime);auto_add"`
(3)唯一性設定
對欄位後新增【`orm:"unique"`】可以設定資料庫欄位內容全域性唯一,重複插入會報錯
8.檢視函式
檢視函式是beego框架為了解決前端在對後臺傳遞資料的時候需要進行資料計算的一個解決辦法。檢視函式能夠使得開發者在前端中傳遞非常少量的引數,而將具體的計算過程交由後臺處理。檢視函式由三部分構成:前端檢視函式宣告、後段檢視函式實現、前後端檢視函式對映關係建立。
(1)前端檢視函式宣告
其有兩種語法,第一種寫法為:
{{預設引數 | 檢視函式名}} //eg:{{.userName | GetUsrName}}
豎線前面是引數(注意引數要加點),豎線後面是函式名(當然這個函式名隨便寫就行),這種寫法只能傳一個引數。而第二種寫法為:
{{檢視函式名 引數1 引數2 …}} //eg:{{GetUsrInfo .userName .passWord}}
引數之間用空格間隔,引數與檢視函式名之間也使用空格間隔開。
(2)後端檢視函式實現
直接寫在main.go中就行,後端檢視函式實現的函式名和前端檢視函式名是否相同也沒什麼必然聯絡,但是引數的型別和個數必須要和前端宣告的函式結構相同。
func main() {
beego.Run()
}
func GetName(tempName string){...}
func GetInfo(tempName,tempPass string){...}
(3)前後端檢視函式對映關係建立
在main函式的beego.run之前新增語句beego.AddFuncMap(前端函式名,後端函式名)對前端函式和後臺函式建立連結。
func main() {
beego.AddFuncMap(GetUsrName, GetName)
beego.AddFuncMap(GetUsrInfo, GetInfo)
beego.Run()
}
func GetName(tempName string){...}
func GetInfo(tempName,tempPass string){...}