ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

gin+gorm+logrus实现增删改查项目源码

2020-08-08 21:03:56  阅读:488  来源: 互联网

标签:db logrus 改查 gorm AppConf 源码 context gin id


新学golang,呕心沥血小几天,转载请务必附上本文连接。

可能有些地方写的不是很好,请在评论区指教一二~

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
    "github.com/sirupsen/logrus"
    "net/http"
    "os"
    "strconv"
    "time"
)

//对应的实体类
type AppConf struct {
    Id      int    `gorm:"type:bigint(20);column:id;primary_key;AUTO_INCREMENT"`
    App_Id   int    `gorm:"type:bigint(20);column:app_id;not null"`
    Key     string `gorm:"type:varchar(255);column:key;not null"`
    Content string `gorm:"type:varchar(1500);column:content;not null"`
    Ctime   int    `gorm:"type:bigint(20);column:ctime;not null"`
    Utime   int    `gorm:"type:bigint(20);column:utime;not null"`
}

//声明全局数据库连接变量
var db *gorm.DB
var log = logrus.New()
func main() {
    defer db.Close()
    engine := gin.Default()
    engine.Use(LoggerToFile())
    routerGroup := engine.Group("/test")

    //查询所有数据
    routerGroup.GET("/appConfs", ListAll)

    //增加数据
    routerGroup.POST("/appConfs", Add)

    //删除数据
    routerGroup.DELETE("/appConfs/:id", Delete)

    //更新数据
    routerGroup.PATCH("/appConfs/:id", Update)
    engine.Run(":9999")

}

//初始化,创建连接
func init() {
    //连接mysql
    db, _ = gorm.Open("mysql", "root:123456(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local")
    LoggerToFile()
    //单对单
    db.SingularTable(true)
    //设置数据库连接池
    db.DB().SetMaxIdleConns(5)
    db.DB().SetMaxOpenConns(10)
}

//查询所有用户信息
func ListAll(context *gin.Context) {
    var (
        //定义数据表条数
        count int
        //为count传参
        appConfCount[] AppConf
    )

    //获取指定表的数据总条数
    err := db.Model(&appConfCount).Count(&count)
    if err != nil {
        context.JSON(http.StatusOK,gin.H{
            "code":401,
            "status":"error",
            "message":"空表 !",
            "data":"null",
        })
    }
    //创建一个长度为0,容量为count的切片,使其避免扩容。    当时没用gorm,需要存到集合里,才会有扩容。下述不会
    var appConfs = make([]AppConf, 0, count)

    //查询数据表 app_conf
    rowsAffected:= db.Model(&AppConf{}).Find(&appConfs).RowsAffected
    if rowsAffected > 0 {

        context.JSON(http.StatusOK,gin.H{
            "code":200,
            "status":"success",
            "data":appConfs,
        })
    }else {
        context.JSON(http.StatusOK,gin.H{
            "code":401,
            "status":"error",
            "message":"空表 !",
            "data":"null",
        })
    }
}

//新增数据
func Add(context *gin.Context) {
    var appConf AppConf

    //绑定结构体
    context.Bind(&appConf)

    fmt.Println(appConf)
    //若id一样,则添加失败
    rowsAffected := db.Model(&AppConf{}).Create(&appConf).RowsAffected
    if rowsAffected > 0 {
        context.JSON(http.StatusOK,gin.H{
            "code":200,
            "status":"success",
            "message":"添加成功 !",
        })
    }else {
        context.JSON(http.StatusOK, gin.H{
            "code":401,
            "status":"error",
            "message": "添加失败",
        })
    }
}

//根据id删除数据
func Delete(context *gin.Context) {
    id := context.Param("id")
    //sting装int
    s,_ := strconv.Atoi(id)
    rowsAffected := db.Model(&AppConf{}).Where(&AppConf{Id: s}).Delete(&AppConf{}).RowsAffected

    //fmt.Println(rowsAffected)
    if rowsAffected > 0 {
        context.JSON(http.StatusOK,gin.H{
            "code":200,
            "status":"success",
            "message":"删除成功",
        })
    } else {
        context.JSON(http.StatusOK,gin.H{
            "code":401,
            "status":"error",
            "message":"删除失败",
        })
    }
}

//根据id修改信息
func Update(context *gin.Context) {
    var appConf AppConf
    id := context.Param("id")
    s,_ := strconv.Atoi(id)
    //绑定结构体
    context.Bind(&appConf)
    rowsAffected := db.Model(&AppConf{}).Where(&AppConf{Id: s}).Update(&appConf).RowsAffected
    if rowsAffected > 0 {
        context.JSON(http.StatusOK,gin.H{
            "code":200,
            "status":"success",
            "message":"更新成功",
        })
    } else {
        context.JSON(http.StatusOK,gin.H{
            "code":401,
            "status":"error",
            "message":"更新失败",
        })
    }
}


func LoggerToFile() gin.HandlerFunc {

    fileName := "./logger.log"
    //写入文件
    src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
    if err != nil {
        fmt.Println("err", err)
    }

    //实例化
    logger := logrus.New()

    //设置输出
    logger.Out = src

    //设置日志级别
    logger.SetLevel(logrus.DebugLevel)

    //处理日期格式

    logger.SetFormatter(&logrus.TextFormatter{
        TimestampFormat:"2006-01-01 15:04:05",
    })

    //设置日志格式
logger.SetFormatter(&logrus.JSONFormatter{})

    return func(c *gin.Context) {
        // 开始时间
        startTime := time.Now()
        // 处理请求
        c.Next()
        // 结束时间
        endTime := time.Now()
        // 执行时间
        latencyTime := endTime.Sub(startTime)
        latencyTime2 := float32(latencyTime) / float32(1000000)
        // 请求方式
        reqMethod := c.Request.Method
        // 请求路由
        reqUri := c.Request.RequestURI
        // 状态码
        statusCode := c.Writer.Status()
        // 请求IP
        clientIP := c.Request.Host
        // 日志格式
        logger.WithFields(logrus.Fields{
            "status_code"  : statusCode,
            "latency_time" : latencyTime2,
            "client_ip"    : clientIP,
            "req_method"   : reqMethod,
            "req_uri"      : reqUri,
        }).Info()
    }
}

 

标签:db,logrus,改查,gorm,AppConf,源码,context,gin,id
来源: https://www.cnblogs.com/qzhc/p/13460253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有