zoukankan      html  css  js  c++  java
  • Gin+Gorm小项目

    Gin+Gorm小项目

    创建项目


    E:gostudentginubble>go mod tidy      //增加缺失的包,移除没用的包
    
    package main
    
    import (
       "github.com/gin-gonic/gin"
       "net/http"
    )
    
    func main() {
       r := gin.Default()
       //告诉gin框架去哪里找模板文件
       r.LoadHTMLGlob("templates/*")
       r.GET("/", func(c *gin.Context) {
          c.HTML(http.StatusOK, "index.html", nil)
       })
       r.Run(":9090")
    }
    

    引用静态文件



    搭建架子

    package main
    
    import (
       "github.com/gin-gonic/gin"
       "net/http"
    )
    
    //Tode Model
    type Tode struct {
       ID int `json:"id"`
       Title string `json:"title"`
       Status bool `json:"status"`
    }
    
    func main() {
       //创建数据库
       //sql: CREATE DATABASE bubble;
       //连接数据库
       //遇事不决写注释
       r := gin.Default()
       //告诉gin框架模板文件引用的静态文件去哪里找
       r.Static("/static","static")
       //告诉gin框架去哪里找模板文件
       r.LoadHTMLGlob("templates/*")
       r.GET("/", func(c *gin.Context) {
          c.HTML(http.StatusOK, "index.html", nil)
       })
    
       //v1 api
       v1Group := r.Group("v1")
       {
          //待办事项
          //添加
          v1Group.POST("/todo", func(c *gin.Context) {
    
          })
          //查看所有的代办事项
          v1Group.GET("/todo", func(c *gin.Context) {
    
          })
          //查看某一个代办事项
          v1Group.GET("/todo/:id", func(c *gin.Context) {
    
          })
          //修改某一个待办事项
          v1Group.PUT("/todo/:id", func(c *gin.Context) {
    
          })
          //删除
          v1Group.DELETE("/todo/:id", func(c *gin.Context) {
    
          })
       }
       
       r.Run(":9090")
    }
    

    创建数据库

    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)
       //测试连通性
       err = DB.DB().Ping()
       return
       //return DB.DB().Ping()
    }
    
    func main() {
       //创建数据库
       //sql: CREATE DATABASE bubble;
       //连接数据库
       err := initMySQL()
       if err != nil {
          //可以搞个日志
          panic(err)
       }
       //模型绑定
       DB.AutoMigrate(&Tode{})   //todos
       defer DB.Close()  //程序退出,关闭数据库
    

    添加功能

          //待办事项
          //添加
          v1Group.POST("/todo", func(c *gin.Context) {
             //前端页面填写待办事项,点击提交,会发请求到这里
             //1. 从请求中把数据拿出来
             var todo Tode
             c.BindJSON(&todo)
             //2. 存入数据库
             err = DB.Create(&todo).Error
             //3. 返回响应
             if err != nil {
                c.JSON(http.StatusOK,gin.H{"error": err.Error()})
             }else {
                c.JSON(http.StatusOK, todo)
                //c.JSON(http.StatusOK, gin.H{
                // "code": 200,
                // "msg" : "success",
                // "data": todo,
                //})
             }
            
    


    查找功能

    //查看所有的代办事项
    v1Group.GET("/todo", func(c *gin.Context) {
       //查询todo这个表里的所有数据
       var todeList []Tode
       err := DB.Find(&todeList).Error
       if err != nil {
          c.JSON(http.StatusOK, gin.H{"error": err.Error()})
       }else {
          c.JSON(http.StatusOK, todeList)
       }
    })
        //查看某一个代办事项
          v1Group.GET("/todo/:id", func(c *gin.Context) {
    
          })
    

    修改功能

     //修改某一个待办事项
          v1Group.PUT("/todo/:id", func(c *gin.Context) {
             id, ok := c.Params.Get("id")
             if !ok {
                c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
                return
             }
             var todo Todo
             if err = DB.Where("id=?", id).First(&todo).Error; err!=nil{
                c.JSON(http.StatusOK, gin.H{"error": err.Error()})
                return
             }
             c.BindJSON(&todo)
             if err = DB.Save(&todo).Error; err!= nil{
                c.JSON(http.StatusOK, gin.H{"error": err.Error()})
             }else{
                c.JSON(http.StatusOK, todo)
             }
          })
    

    删除功能

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

    总代码

    package main
    
    import (
       "github.com/gin-gonic/gin"
       "github.com/jinzhu/gorm"
       _ "github.com/jinzhu/gorm/dialects/mysql"
       "net/http"
    )
    
    var (
       DB *gorm.DB
    )
    
    //Tode 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)
       //测试连通性
       err = DB.DB().Ping()
       return
       //return DB.DB().Ping()
    }
    
    func main() {
       //创建数据库
       //sql: CREATE DATABASE bubble;
       //连接数据库
       err := initMySQL()
       if err != nil {
          //可以搞个日志
          panic(err)
       }
       //模型绑定
       DB.AutoMigrate(&Todo{})   //todos
       defer DB.Close()  //程序退出,关闭数据库
       //遇事不决写注释
       r := gin.Default()
       //告诉gin框架模板文件引用的静态文件去哪里找
       r.Static("/static","static")
       //告诉gin框架去哪里找模板文件
       r.LoadHTMLGlob("templates/*")
       r.GET("/", func(c *gin.Context) {
          c.HTML(http.StatusOK, "index.html", nil)
       })
    
       //v1 api
       v1Group := r.Group("v1")
       {
          //待办事项
          //添加
          v1Group.POST("/todo", func(c *gin.Context) {
             //前端页面填写待办事项,点击提交,会发请求到这里
             //1. 从请求中把数据拿出来
             var todo Todo
             c.BindJSON(&todo)
             //2. 存入数据库
             err := DB.Create(&todo).Error
             if err != nil {
                c.JSON(http.StatusOK,gin.H{"error": err.Error()})
             }else {
                c.JSON(http.StatusOK, todo)
                //c.JSON(http.StatusOK, gin.H{
                // "code": 200,
                // "msg" : "success",
                // "data": todo,
                //})
             }
             //3. 返回响应
    
          })
          //查看所有的代办事项
          v1Group.GET("/todo", func(c *gin.Context) {
             //查询todo这个表里的所有数据
             var todeList []Todo
             err := DB.Find(&todeList).Error
             if err != nil {
                c.JSON(http.StatusOK, gin.H{"error": err.Error()})
             }else {
                c.JSON(http.StatusOK, todeList)
             }
          })
          //查看某一个代办事项
          v1Group.GET("/todo/:id", func(c *gin.Context) {
    
          })
          //修改某一个待办事项
          v1Group.PUT("/todo/:id", func(c *gin.Context) {
             id, ok := c.Params.Get("id")
             if !ok {
                c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
                return
             }
             var todo Todo
             if err = DB.Where("id=?", id).First(&todo).Error; err!=nil{
                c.JSON(http.StatusOK, gin.H{"error": err.Error()})
                return
             }
             c.BindJSON(&todo)
             if err = DB.Save(&todo).Error; err!= nil{
                c.JSON(http.StatusOK, gin.H{"error": err.Error()})
             }else{
                c.JSON(http.StatusOK, todo)
             }
          })
          //删除
          v1Group.DELETE("/todo/:id", func(c *gin.Context) {
             id, ok := c.Params.Get("id")
             if !ok {
                c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
                return
             }
             if err = DB.Where("id=?", id).Delete(Todo{}).Error;err!=nil{
                c.JSON(http.StatusOK, gin.H{"error": err.Error()})
             }else{
                c.JSON(http.StatusOK, gin.H{id:"deleted"})
             }
          })
       }
       r.Run(":9090")
    }
    
  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/zisefeizhu/p/12795014.html
Copyright © 2011-2022 走看看