一、概述
承接上一篇(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