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

发布时间 2024-01-11 11:06:56作者: 飘杨......

一、概述

  承接上一篇(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
}