首页 > 数据库 >Go+Gin+xorm+MySql实现增删改查

Go+Gin+xorm+MySql实现增删改查

时间:2024-01-11 11:13:30浏览次数:29  
标签:err 改查 go user context MySql Go gin id

一、概述

  承接上一篇(ps:原生增删改查),本篇使用xorm实现增删改查。

  之所以要使用xrom是因为xrom可以极大的缩小操作数据库的成本。

  使用rom之前需要导入响应的包

go get github.com/go-xorm/xorm #安装xorm
go get xorm.io/core
go get -u github.com/go-sql-driver/mysql #安装MySQL驱动
go mod tidy #引用项目需要的依赖增加到go.mod文件,去掉go.mod文件中项目不需要的依赖

 

二、代码示例

  1.UserXOrmControll.go //控制器

package controller

import (
    "fmt"

    "go_workspace/model"

    "go_workspace/entity"

    "strconv"
    "time"

    "github.com/gin-gonic/gin"
)

func RegisterXormUser() {
    //实例化一个路由
    router := gin.Default()
    //注册增删改查路由
    router.POST("/addUser", addUserUseXormHandler)
    router.GET("/getUsers", getUsersUseXormHandler)
    router.GET("/getUserById", getUserUseXormById)
    router.POST("/updateUser/:id", updateUserUseXormHandler)
    router.POST("/deleteUser", deleteUserUseXormHandler)
    router.Run(":8888")
}

// 添加新用户
func addUserUseXormHandler(context *gin.Context) {
    var user entity.User
    err := context.ShouldBindJSON(&user)
    if err != nil {
        context.JSON(400, gin.H{"error": err.Error()})
        return
    }
    user.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
    row, err1 := model.AddUserUseXorm(user)
    if row > 0 {
        context.JSON(200, gin.H{"data": user})
    } else {
        context.JSON(500, gin.H{"data": err1.Error()})
    }
    fmt.Println("添加新用户")
}

// 获取用户列表
func getUsersUseXormHandler(context *gin.Context) {

    users, err := model.GetUsersUseXorm()
    if err != nil {
        context.JSON(500, gin.H{"data": err})
    } else {
        context.JSON(200, gin.H{"data": users})
    }
}

// 根据用户id获取用户详情
func getUserUseXormById(context *gin.Context) {
    id := context.Query("id")
    flag, err, user := model.GetUserUseXormById(id)
    if flag {
        context.JSON(200, gin.H{"data": user})
    } else {
        if err != nil {
            context.JSON(500, gin.H{"error": err.Error()})
        } else {
            context.JSON(500, gin.H{
                "code":    10002,
                "message": "未查询到用户信息",
            })
        }

    }
}

// 更新用户信息
func updateUserUseXormHandler(context *gin.Context) {
    var id = context.Param("id")
    var user entity.User
    err := context.ShouldBindJSON(&user)
    if err != nil {
        context.JSON(400, gin.H{"error": err.Error()})
    }
    err2 := model.UpdateUserUseXorm(id, user)
    if err2 != nil {
        context.JSON(500, gin.H{"error": err.Error()})
    } else {
        context.JSON(200, gin.H{"data": "更新成功"})
    }
}

// 删除用户信息
func deleteUserUseXormHandler(context *gin.Context) {
    var user entity.User
    err1 := context.ShouldBindJSON(&user)
    if err1 != nil {
        context.JSON(400, gin.H{"error": err1.Error()})
    }
    err := model.DeleteUserUseXorm(strconv.FormatInt(user.Id, 10))
    if err != nil {
        context.JSON(500, gin.H{"error": err.Error()})
    } else {
        context.JSON(200, gin.H{"data": "删除成功:" + strconv.FormatInt(user.Id, 10)})
    }
}

  2.UserXOrmModel.go//使用xrom实例操作数据库

package model

import (
    "fmt"

    // "os"

    "go_workspace/entity"

    _ "github.com/go-sql-driver/mysql" //导入mysql驱动
    "github.com/go-xorm/xorm"
    "xorm.io/core"
)

// 连接数据库并创建数据库引擎对象
func GetDBEngine() *xorm.Engine {
    engine, err := xorm.NewEngine("mysql", "root:123456@tcp(localhost:3306)/tony_cursor?charset=utf8&parseTime=true&loc=Local")
    if err != nil {
        fmt.Println("error", err.Error())
    } else {
        fmt.Println("xorm实例创建成功")
    }
    err2 := engine.Ping()
    if err2 != nil {
        fmt.Println("error", err2.Error())
    } else {
        fmt.Println("数据库连接成功")
    }
    engine.ShowSQL(true)                     //在控制台打印出生成的sql语句
    engine.Logger().SetLevel(core.LOG_DEBUG) //在控制台上打印debug信息
    //将日志保存为文件
    // f, err3 := os.Create("xorm_sql.log")
    // if err3 != nil {
    //     fmt.Println(err.Error())
    // }
    // engine.SetLogger(xorm.NewSimpleLogger(f))
    //设置连接池空闲数大小
    // engine.SetMaxIdleConns(1000)
    //设置最大打开连接数
    // engine.SetMaxOpenConns(5000)
    //设置连接最大生存时间
    // engine.SetConnMaxLifetime()
    // defer engine.Close()

    return engine

}

// 获取用户Session
// func getUserSession() *Session {
//     session := GetDBEngine().Table("user")
//     count, err := session.Count()
//     if err != nil {
//         panic(err.Error())
//     }
//     fmt.Println(count)
//     GetDBEngine().SetTableMapper(core.SnakeMapper{})
//     return session
// }

// 查询User表中的数据
// 添加新用户
func AddUserUseXorm(user entity.User) (int64, error) {
    row, err := GetDBEngine().Insert(user)
    if err != nil {
        fmt.Println("error", err.Error())
    }
    fmt.Println("row", row)
    return row, err
}

// 获取用户列表
func GetUsersUseXorm() ([]*entity.User, error) {
    users := make([]*entity.User, 0)
    err := GetDBEngine().Find(&users)
    return users, err
}

// 根据用户id获取用户详情
func GetUserUseXormById(id string) (bool, error, entity.User) {
    var user entity.User
    flag, err := GetDBEngine().Where("id=?", id).Get(&user)
    return flag, err, user
}

// 更新用户信息
func UpdateUserUseXorm(id string, user entity.User) error {
    _, err := GetDBEngine().Id(id).Update(&user)
    return err
}

// 删除用户信息
func DeleteUserUseXorm(id string) error {
    var user entity.User
    user.Deleted = 1
    _, err := GetDBEngine().Id(id).Update(&user)
    return err
}

 

标签:err,改查,go,user,context,MySql,Go,gin,id
From: https://www.cnblogs.com/tony-yang-flutter/p/17958109

相关文章

  • Argo-rollout使用--蓝绿和金丝雀发布
    1.安装argo-rolloutkubectlcreatenamespaceargo-rolloutskubectlapply-nargo-rollouts-fhttps://github.com/argoproj/argo-rollouts/releases/download/v1.5.0/install.yaml官网:https://argoproj.github.io/argo-rollouts/ 2.蓝绿部署部署applicationapiVersion......
  • mysql修改json字段sql备份
    updatedec_maina,dec_main_copy20240110bseta.ie_Date=b.ie_Date,a.declaration_data=b.declaration_data,a.custom_state=b.custom_state,a.content=JSON_SET(a.cont......
  • 银河麒麟服务器操作系统V10SP2离线安装Google Chrome浏览器
     https://blog.csdn.net/ShenSeKyun/article/details/132224932https://www.google.cn/chrome/index.htmlGOOGLE网址最下方下载LINUX版本的浏览器安装包打开终端,输入rpm-ivhgoogle-chrome-stable_current_x86_64.rpmyuminstall google-chrome-stable_current_x86_64.r......
  • Golang 监控文件夹内文件的增删改(包括子文件夹)
    你需要自己处理log部分packagemainimport("crypto/md5""fmt""go-admin/log""os""path/filepath""time""github.com/fsnotify/fsnotify")typeFileChangeCallback......
  • mysql实现数据文件存储到指定分区
    通过rpm安装的mysql默认程序文件放在/usr/bin,数据文件放在/var/lib/mysql,需要将数据文件放在不同分区,保证数据量时将根目录撑爆一、关闭数据库[root@node1bin]#systemctlstopmysqld[root@node1bin]#systemctlstatusmysqld●mysqld.service-MySQLServerLoaded:lo......
  • MySQL InnoDB ReplicaSet安装文档
    MySQL副本集介绍MySQLInnoDBReplicaSet(也叫MySQL副本集,有些地方也翻译成MySQL复制集)是在MySQL8.0.19版本(2020-01-13Released)之后开始支持的,MySQL副本集中拥有一个primary节点,一个或多个secondary节点,它不像MySQLInnoDBCluster一样提供故障自愈和多主模式,但是它提供手......
  • 2024-01-10:用go语言,给你一个下标从 0 开始的二维整数数组 pairs 其中 pairs[i] = [sta
    2024-01-10:用go语言,给你一个下标从0开始的二维整数数组pairs其中pairs[i]=[starti,endi]如果pairs的一个重新排列满足对每一个下标i(1<=i<pairs.length)都有endi-1==starti,那么我们就认为这个重新排列是pairs的一个合法重新排列。请你返回任意一个pairs的......
  • MySQL Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoin
    错误信息:2023-12-12T09:32:31.383149Z0[ERROR]InnoDB:IgnoringtheredologduetomissingMLOG_CHECKPOINTbetweenthecheckpoint5777611209andtheend5777612857.2023-12-12T09:32:31.384149Z0[ERROR]InnoDB:PlugininitializationabortedwitherrorGeneri......
  • 揭秘MySQL中的"黑洞":为什么你应避免默认使用NULL值?
    摘要:在MySQL中,NULL值是一种特殊的标记,表示数据缺失或未知。然而,默认使用NULL值可能会引发一系列问题。本文将深入探讨为什么不建议默认使用NULL值,并通过具体示例揭示其潜在风险。一、什么是NULL值?在MySQL中,NULL表示一个字段没有值或数据未知。不同于空字符串("")或0,NULL表示缺失或......
  • Linux安装MySQL5.7并设置systemd方式管理
    1、安装前检查1)检查linux系统是否安装过mysql#检查系统中有无安装过mysql,如果有就卸载rpm-qa|grepmysqlrpm-e--nodepsmysql-xxxx#检查所有mysql对应的文件夹,全部删除whereismysqlfind/-namemysqlrm-rf......#删除mysql的配置文件rm-rf/etc/my.cnf#删......