bubble小清单后端代码

bubble小清单后端代码#

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "github.com/jinzhu/gorm"
   _"github.com/jinzhu/gorm/dialects/mysql"//别忘加驱动
)
//go mod tidy

//定义全局DB
var(
   DB *gorm.DB
)


//创建模型 Todu model
type Todo struct {
   ID     int    `json:"id"`
   Title  string `json:"title"`
   Status bool   `json:"status"`
}


//链接数据库
func initMySQL() (err error) {
   dsn:="root:123456@tcp(127.0.0.1:3306)/bubble?charset=utf8mb4&parseTime=True&loc=Local"
   DB,err=gorm.Open("mysql",dsn)
   if err!=nil{
      return
   }
   return DB.DB().Ping()
}

func main() {
   //创建数据库
   //sql命令:create database bublle;
   //use bublle;
   //链接数据库
   err:=initMySQL()
   if err != nil {
      fmt.Println(err)
   }

   //延时关闭,程序退出关闭数据库
   defer DB.Close()

   //模型绑定,把模型与数据库的表进行绑定
   DB.AutoMigrate(&Todo{})//todos
    
   //默认路由
   r:=gin.Default()
    
   //告诉gin模板文件引用的静态文件去哪里找
   r.Static("/static","static")
    
   //告诉gin去哪里找模板
   r.LoadHTMLGlob("templates/*")
    
   //GET:请求方式;/:请求的路径
   r.GET("/", func(c *gin.Context) {
      c.HTML(200,"index.html",nil)
   })
    
   //定义一个v1版本api:路由组
   v1Group:=r.Group("v1")
   {
      //添加
      v1Group.POST("/todo", func(c *gin.Context) {
         //前端页面填写待办事项点击提交,会发送请求到这里
         //从请求中把数据拿出来
         //定义存放的变量
         var todo Todo
         //数据绑定
         c.ShouldBind(&todo)
         //存入数据库,返回响应
         if err=DB.Create(&todo).Error;err!=nil{
            c.JSON(200,gin.H{
               "error":err.Error()})
         }else {
            c.JSON(200,todo)
         }
      })
      //查看代办
      v1Group.GET("/todo", func(c *gin.Context) {
         //查询todo这个表的所有数据
         var todoList []Todo
         if err=DB.Find(&todoList).Error;err!=nil{
            c.JSON(200,err.Error())
         }else {
            c.JSON(200,todoList)
         }
      })
      //修改某一个代办事项
      v1Group.PUT("/todo/:id", func(c *gin.Context) {
         id,ok :=c.Params.Get("id")
         if !ok{
            c.JSON(200,gin.H{
               "error":"id不存在"})
            return
         }
         var todo Todo
         if err=DB.Where("id=?",id).First(&todo).Error;err!=nil{
            c.JSON(200,gin.H{
               "error":err.Error()})
            return
         }
         //fmt.Println(todo)
         c.BindJSON(&todo)
         //fmt.Println(todo)
         if err=DB.Save(&todo).Error;err!=nil{
            c.JSON(200,gin.H{
               "error":err.Error()})
         }else {
            c.JSON(200,todo)
         }

      })
      //删除
      v1Group.DELETE("/todo/:id", func(c *gin.Context) {
         id,ok :=c.Params.Get("id")
         if !ok{
            c.JSON(200,gin.H{
               "error":"id不存在"})
            return
         }
         if err=DB.Where("id=?",id).Delete(Todo{}).Error;err!=nil{
            c.JSON(200,gin.H{
               "error":err.Error()})
            return
         }else {
            c.JSON(200,gin.H{
               id:"deleted",
            })
         }
      })
   }

   //启动
   r.Run(":8080")

}

作者:suehoo

出处:https://www.cnblogs.com/suehoo/p/16929426.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   suehoo  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu