使用gin和gorm框架完成的bubble小清单项目
bubble小項目
- bubble小清單項目
- 1. 使用gin框架來做服務端,回應瀏覽器發送的請求
- 1.gin.Default() 啟動一個默認的路由
- 1.前端頁面需要加載靜態文件
- 2.靜態文件加載地址
- 3.處理瀏覽器發送的GET訪問請求
- 4. 定義一個路由組來處理瀏覽器發送的各種請求
- 2.controller文件包含處理瀏覽器發送的各種請求
- 1.controller.BubbleHandle
- 2. controller.CreateTodo
- 3. controller.LookTodoList
- 4. controller.UpdateTodo
- 5. controller.DeleteTodo
- 2. 使用 gorm 框架來連接數據庫,實現增刪改查
- 1.創建連接mysql文件
- 2. 創建models文件代表與數據庫相關的操作都在這進行
- 3. 創建結構體與客戶端發送來的數據進行綁定
- 4. 完成各種操作(增刪改查)
- 1.CreateData
- 2. ShowData
- 3. UpDateTodo
- 4. Save
- 5. DeleteTodo
- 3.具體使用
bubble小清單項目
1. 使用gin框架來做服務端,回應瀏覽器發送的請求
1.gin.Default() 啟動一個默認的路由
r := gin.Default()返回一個默認的引擎 *gin.Engine類型下面我們就要使用r來做事情
1.前端頁面需要加載靜態文件
使用r.LoadHTMLGlob() 方法
2.靜態文件加載地址
使用r.Static()方法
3.處理瀏覽器發送的GET訪問請求
r.GET("/bubble", controller.BubbleHandle)
4. 定義一個路由組來處理瀏覽器發送的各種請求
v1Group := r.Group("v1"){// 4.1 添加發送的POST請求v1Group.POST("/todo", controller.CreateTodo)// 4.2 查看所有的待辦事項v1Group.GET("/todo", controller.LookTodoList)// 4.3 修改狀態為完成或者未完成v1Group.PUT("todo/:id", controller.UpdateTodo)// 4.4 刪除已經完成的待辦事項v1Group.DELETE("todo/:id", controller.DeleteTodo)}2.controller文件包含處理瀏覽器發送的各種請求
1.controller.BubbleHandle
處理一開始瀏覽器發送的GET請求
func BubbleHandle(c *gin.Context){c.HTML(http.StatusOK, "index.html", nil) }返回一個HTML頁面
2. controller.CreateTodo
在數據庫表中創建一個新的元素
func CreateTodo (c *gin.Context) {// 前端頁面填寫待辦事項, 點擊提交就會發送POST請求到這里// 1.從請求中把數據拿出來var todo models.Todoc.BindJSON(&todo)// 2.存入數據庫if err := models.CreateData(&todo); err != nil{c.JSON(http.StatusBadRequest, gin.H{"error" : err.Error()})}else {// 3.返回響應c.JSON(http.StatusOK, todo)} }3. controller.LookTodoList
在瀏覽器頁面展示數據庫中現有的數據
func LookTodoList(c *gin.Context) {// 查詢todo這個表里面的所有數據var todoList []models.Todoif err := models.ShowData(&todoList); err != nil {c.JSON(http.StatusOK, gin.H{"error" : err.Error()})}else {c.JSON(http.StatusOK, todoList)} }4. controller.UpdateTodo
修改待辦事項的狀態
func UpdateTodo(c *gin.Context) {// 拿到id之后更新status狀態即可id := c.Params.ByName("id")var todo models.Todoif err := models.UpdateTodo(&todo, id); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error" : err.Error()})}else {c.JSON(http.StatusOK, todo)}// BindJSON將json文件于todo綁定修改狀態c.BindJSON(&todo)models.Save(todo) }5. controller.DeleteTodo
在客戶端點擊刪除, 即發送DELETE請求,同時在數據庫里面刪除即可
func DeleteTodo (c *gin.Context) {id := c.Params.ByName("id")var todo models.Todoif err := models.DeleteTodo(&todo, id); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error" : err.Error()})}else {c.JSON(http.StatusOK, gin.H{id : "deleted"})} }具體說明各種處理函數的具體執行都是由models文件里面的gorm框架來操作完成
2. 使用 gorm 框架來連接數據庫,實現增刪改查
1.創建連接mysql文件
聲明一個全局的*gorm.DB變量用來與數據庫之間的操作
重要的一點是需要與下文的models.Todo進行結構體綁定使用AutoMigrate方法
package databaseimport ("fmt""gin_demo/lesson15/models""gorm.io/driver/mysql""gorm.io/gorm""time" )var GlobalDB *gorm.DBfunc InitMysql(){dsn := "root:admin@tcp(127.0.0.1:3306)/bubble?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {fmt.Println(err)return}sqlDB, err := db.DB()if err != nil {return}sqlDB.SetMaxOpenConns(100)sqlDB.SetMaxIdleConns(10)sqlDB.SetConnMaxLifetime(time.Hour)GlobalDB = db// 模型綁定GlobalDB.AutoMigrate(&models.Todo{})fmt.Println("連接成功") }2. 創建models文件代表與數據庫相關的操作都在這進行
3. 創建結構體與客戶端發送來的數據進行綁定
type Todo struct {// json標簽表示在瀏覽器中這個字段的模樣ID int `json:"id"`Title string `json:"title"`Status bool `json:"status"` }注意這里字段的首字母需要大寫,這樣才對外部的包可見
4. 完成各種操作(增刪改查)
1.CreateData
在表中插入一段數據,使用了GlobalDB.Create()方法需要傳入綁定的結構體指針
2. ShowData
在客戶端展示數據庫中現有的數據元素,使用了GlobalDB.Find()方法,將todoList切片指針傳入并且沒有任何查詢條件,就會將查詢到的數據全部綁定在todoList中,即可展示全部數據
3. UpDateTodo
根據傳入的id值找到一條特定的元素,并將元素綁定至todo結構體中, 在調用函數的地方使用c.BindJSON()方法修改status的狀態
4. Save
使用GlobalDB.Save(todo)方法保存即可
5. DeleteTodo
使用GlobalDB.Where().Delete()即可 根據傳入的id找到一條特定的元素, 并且將其刪除即可
func CreateData(todo *Todo) (err error){if err = database.GlobalDB.Create(&todo).Error; err != nil{return nil}return }func ShowData(todoList *[]Todo)(err error){if err = database.GlobalDB.Find(&todoList).Error; err != nil {return nil}return }func UpdateTodo(todo *Todo, id string) (err error){if err = database.GlobalDB.Where("id = ?", id).First(&todo).Error; err != nil {return nil}return }func Save(todo Todo){database.GlobalDB.Save(todo) }func DeleteTodo(todo *Todo, id string)(err error) {if err = database.GlobalDB.Where("id = ?", id).Delete(&todo).Error; err != nil{return nil}return }3.具體使用
總結
以上是生活随笔為你收集整理的使用gin和gorm框架完成的bubble小清单项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer 11. 旋转数组的最小数
- 下一篇: List有关知识与ArrayList的实