使用gin和gorm框架完成的bubble小清单项目
bubble小項(xiàng)目
- bubble小清單項(xiàng)目
- 1. 使用gin框架來做服務(wù)端,回應(yīng)瀏覽器發(fā)送的請求
- 1.gin.Default() 啟動一個默認(rèn)的路由
- 1.前端頁面需要加載靜態(tài)文件
- 2.靜態(tài)文件加載地址
- 3.處理瀏覽器發(fā)送的GET訪問請求
- 4. 定義一個路由組來處理瀏覽器發(fā)送的各種請求
- 2.controller文件包含處理瀏覽器發(fā)送的各種請求
- 1.controller.BubbleHandle
- 2. controller.CreateTodo
- 3. controller.LookTodoList
- 4. controller.UpdateTodo
- 5. controller.DeleteTodo
- 2. 使用 gorm 框架來連接數(shù)據(jù)庫,實(shí)現(xiàn)增刪改查
- 1.創(chuàng)建連接mysql文件
- 2. 創(chuàng)建models文件代表與數(shù)據(jù)庫相關(guān)的操作都在這進(jìn)行
- 3. 創(chuàng)建結(jié)構(gòu)體與客戶端發(fā)送來的數(shù)據(jù)進(jìn)行綁定
- 4. 完成各種操作(增刪改查)
- 1.CreateData
- 2. ShowData
- 3. UpDateTodo
- 4. Save
- 5. DeleteTodo
- 3.具體使用
bubble小清單項(xiàng)目
1. 使用gin框架來做服務(wù)端,回應(yīng)瀏覽器發(fā)送的請求
1.gin.Default() 啟動一個默認(rèn)的路由
r := gin.Default()返回一個默認(rèn)的引擎 *gin.Engine類型下面我們就要使用r來做事情
1.前端頁面需要加載靜態(tài)文件
使用r.LoadHTMLGlob() 方法
2.靜態(tài)文件加載地址
使用r.Static()方法
3.處理瀏覽器發(fā)送的GET訪問請求
r.GET("/bubble", controller.BubbleHandle)
4. 定義一個路由組來處理瀏覽器發(fā)送的各種請求
v1Group := r.Group("v1"){// 4.1 添加發(fā)送的POST請求v1Group.POST("/todo", controller.CreateTodo)// 4.2 查看所有的待辦事項(xiàng)v1Group.GET("/todo", controller.LookTodoList)// 4.3 修改狀態(tài)為完成或者未完成v1Group.PUT("todo/:id", controller.UpdateTodo)// 4.4 刪除已經(jīng)完成的待辦事項(xiàng)v1Group.DELETE("todo/:id", controller.DeleteTodo)}2.controller文件包含處理瀏覽器發(fā)送的各種請求
1.controller.BubbleHandle
處理一開始瀏覽器發(fā)送的GET請求
func BubbleHandle(c *gin.Context){c.HTML(http.StatusOK, "index.html", nil) }返回一個HTML頁面
2. controller.CreateTodo
在數(shù)據(jù)庫表中創(chuàng)建一個新的元素
func CreateTodo (c *gin.Context) {// 前端頁面填寫待辦事項(xiàng), 點(diǎn)擊提交就會發(fā)送POST請求到這里// 1.從請求中把數(shù)據(jù)拿出來var todo models.Todoc.BindJSON(&todo)// 2.存入數(shù)據(jù)庫if err := models.CreateData(&todo); err != nil{c.JSON(http.StatusBadRequest, gin.H{"error" : err.Error()})}else {// 3.返回響應(yīng)c.JSON(http.StatusOK, todo)} }3. controller.LookTodoList
在瀏覽器頁面展示數(shù)據(jù)庫中現(xiàn)有的數(shù)據(jù)
func LookTodoList(c *gin.Context) {// 查詢todo這個表里面的所有數(shù)據(jù)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
修改待辦事項(xiàng)的狀態(tài)
func UpdateTodo(c *gin.Context) {// 拿到id之后更新status狀態(tài)即可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綁定修改狀態(tài)c.BindJSON(&todo)models.Save(todo) }5. controller.DeleteTodo
在客戶端點(diǎn)擊刪除, 即發(fā)送DELETE請求,同時在數(shù)據(jù)庫里面刪除即可
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"})} }具體說明各種處理函數(shù)的具體執(zhí)行都是由models文件里面的gorm框架來操作完成
2. 使用 gorm 框架來連接數(shù)據(jù)庫,實(shí)現(xiàn)增刪改查
1.創(chuàng)建連接mysql文件
聲明一個全局的*gorm.DB變量用來與數(shù)據(jù)庫之間的操作
重要的一點(diǎn)是需要與下文的models.Todo進(jìn)行結(jié)構(gòu)體綁定使用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. 創(chuàng)建models文件代表與數(shù)據(jù)庫相關(guān)的操作都在這進(jìn)行
3. 創(chuàng)建結(jié)構(gòu)體與客戶端發(fā)送來的數(shù)據(jù)進(jìn)行綁定
type Todo struct {// json標(biāo)簽表示在瀏覽器中這個字段的模樣ID int `json:"id"`Title string `json:"title"`Status bool `json:"status"` }注意這里字段的首字母需要大寫,這樣才對外部的包可見
4. 完成各種操作(增刪改查)
1.CreateData
在表中插入一段數(shù)據(jù),使用了GlobalDB.Create()方法需要傳入綁定的結(jié)構(gòu)體指針
2. ShowData
在客戶端展示數(shù)據(jù)庫中現(xiàn)有的數(shù)據(jù)元素,使用了GlobalDB.Find()方法,將todoList切片指針傳入并且沒有任何查詢條件,就會將查詢到的數(shù)據(jù)全部綁定在todoList中,即可展示全部數(shù)據(jù)
3. UpDateTodo
根據(jù)傳入的id值找到一條特定的元素,并將元素綁定至todo結(jié)構(gòu)體中, 在調(diào)用函數(shù)的地方使用c.BindJSON()方法修改status的狀態(tài)
4. Save
使用GlobalDB.Save(todo)方法保存即可
5. DeleteTodo
使用GlobalDB.Where().Delete()即可 根據(jù)傳入的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.具體使用
總結(jié)
以上是生活随笔為你收集整理的使用gin和gorm框架完成的bubble小清单项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer 11. 旋转数组的最小数
- 下一篇: List有关知识与ArrayList的实