Go微服务框架go-kratos中,gorm如何高效执行增删改查操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1083个文字,预计阅读时间需要5分钟。
一、简介在上一篇文章中,我们简要介绍了Go-Kratos。本文将在此基础上,详细讲解如何使用Kratos编写项目代码。我们将结合Go和数据库操作库gorm,一步步实现一个简单的增删改查操作。
二、使用Kratos编写项目代码本文将基于上一篇文章的基础,结合Go和gorm,实现一个简单的增删改查操作。
三、结合Go和gorm实现增删改查
1.初始化项目
首先,我们需要创建一个新的Go项目,并引入必要的依赖。在项目中,我们将使用Kratos框架和gorm数据库操作库。2. 配置数据库连接在项目根目录下创建一个名为`config`的文件夹,并在其中创建一个名为`database.yml`的配置文件,用于配置数据库连接信息。
yamldefault: &default driver: mysql host: 127.0.0.1 port: 3306 user: root password: root name: test params: charset: utf8mb4 parseTime: true loc: Local
development: <<: *default env: dev
test: <<: *default env: test
production: <<: *default env: prod
3. 创建模型在项目中创建一个名为`model`的文件夹,并在其中创建一个名为`user.go`的文件,用于定义用户模型。
gopackage model
import ( gorm.io/gorm)
type User struct { gorm.Model Name string `gorm:type:varchar(100);not null` Age int `gorm:type:int;not null`}
4. 实现增删改查操作在项目中创建一个名为`controller`的文件夹,并在其中创建一个名为`user.go`的文件,用于实现增删改查操作。
gopackage controller
import ( fmt net/http github.com/gin-gonic/gin gorm.io/gorm your_project/model)
func CreateUser(c *gin.Context) { var user model.User if err :=c.ShouldBindJSON(&user); err !=nil { c.JSON(http.StatusBadRequest, gin.H{error: err.Error()}) return }
db :=c.MustGet(db).(*gorm.DB) if err :=db.Create(&user).Error; err !=nil { c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{message: User created successfully})}
func GetUser(c *gin.Context) { id :=c.Param(id) var user model.User db :=c.MustGet(db).(*gorm.DB) if err :=db.First(&user, id=?, id).Error; err !=nil { c.JSON(http.StatusNotFound, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{user: user})}
func UpdateUser(c *gin.Context) { id :=c.Param(id) var user model.User if err :=c.ShouldBindJSON(&user); err !=nil { c.JSON(http.StatusBadRequest, gin.H{error: err.Error()}) return }
db :=c.MustGet(db).(*gorm.DB) if err :=db.Model(&user).Where(id=?, id).Updates(user).Error; err !=nil { c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{message: User updated successfully})}
func DeleteUser(c *gin.Context) { id :=c.Param(id) db :=c.MustGet(db).(*gorm.DB) if err :=db.Delete(&model.User{}, id=?, id).Error; err !=nil { c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{message: User deleted successfully})}
5. 配置路由在项目中创建一个名为`router`的文件夹,并在其中创建一个名为`router.go`的文件,用于配置路由。
gopackage router
import ( github.com/gin-gonic/gin your_project/controller)
func SetupRouter() *gin.Engine { router :=gin.Default()
router.POST(/user, controller.CreateUser) router.GET(/user/:id, controller.GetUser) router.PUT(/user/:id, controller.UpdateUser) router.DELETE(/user/:id, controller.DeleteUser)
return router}
6. 启动服务在项目中创建一个名为`main.go`的文件,用于启动服务。
gopackage main
import ( your_project/router gorm.io/driver/mysql gorm.io/gorm)
func main() { db, err :=gorm.Open(mysql.Open(user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local), &gorm.Config{}) if err !=nil { panic(failed to connect database) }
router :=router.SetupRouter() router.Use(func(c *gin.Context) { c.Set(db, db) })
router.Run(:8080)}
至此,我们已经成功实现了一个基于Go、Kratos和gorm的简单增删改查操作。
一、简介在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤。这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作。
首先假定你已经会使用 gorm 的基本操作。
安装 gorm:
$ go get -u gorm.io/gorm
go: downloading gorm.io/gorm v1.23.5
... ...
GORM 文档:gorm.io/zh_CN/docs/
Go,gorm 和 go-kratos 版本:
二、新建 student 项目go v1.17.10 windows/amd64
go-kratos v2.2.1
gorm v1.23.5
在前面文章中,我们知道可以使用 kratos new 命令,用 kratos-layout 这个模板快速新建出一个项目。
$ kratos new student
本文共计1083个文字,预计阅读时间需要5分钟。
一、简介在上一篇文章中,我们简要介绍了Go-Kratos。本文将在此基础上,详细讲解如何使用Kratos编写项目代码。我们将结合Go和数据库操作库gorm,一步步实现一个简单的增删改查操作。
二、使用Kratos编写项目代码本文将基于上一篇文章的基础,结合Go和gorm,实现一个简单的增删改查操作。
三、结合Go和gorm实现增删改查
1.初始化项目
首先,我们需要创建一个新的Go项目,并引入必要的依赖。在项目中,我们将使用Kratos框架和gorm数据库操作库。2. 配置数据库连接在项目根目录下创建一个名为`config`的文件夹,并在其中创建一个名为`database.yml`的配置文件,用于配置数据库连接信息。
yamldefault: &default driver: mysql host: 127.0.0.1 port: 3306 user: root password: root name: test params: charset: utf8mb4 parseTime: true loc: Local
development: <<: *default env: dev
test: <<: *default env: test
production: <<: *default env: prod
3. 创建模型在项目中创建一个名为`model`的文件夹,并在其中创建一个名为`user.go`的文件,用于定义用户模型。
gopackage model
import ( gorm.io/gorm)
type User struct { gorm.Model Name string `gorm:type:varchar(100);not null` Age int `gorm:type:int;not null`}
4. 实现增删改查操作在项目中创建一个名为`controller`的文件夹,并在其中创建一个名为`user.go`的文件,用于实现增删改查操作。
gopackage controller
import ( fmt net/http github.com/gin-gonic/gin gorm.io/gorm your_project/model)
func CreateUser(c *gin.Context) { var user model.User if err :=c.ShouldBindJSON(&user); err !=nil { c.JSON(http.StatusBadRequest, gin.H{error: err.Error()}) return }
db :=c.MustGet(db).(*gorm.DB) if err :=db.Create(&user).Error; err !=nil { c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{message: User created successfully})}
func GetUser(c *gin.Context) { id :=c.Param(id) var user model.User db :=c.MustGet(db).(*gorm.DB) if err :=db.First(&user, id=?, id).Error; err !=nil { c.JSON(http.StatusNotFound, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{user: user})}
func UpdateUser(c *gin.Context) { id :=c.Param(id) var user model.User if err :=c.ShouldBindJSON(&user); err !=nil { c.JSON(http.StatusBadRequest, gin.H{error: err.Error()}) return }
db :=c.MustGet(db).(*gorm.DB) if err :=db.Model(&user).Where(id=?, id).Updates(user).Error; err !=nil { c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{message: User updated successfully})}
func DeleteUser(c *gin.Context) { id :=c.Param(id) db :=c.MustGet(db).(*gorm.DB) if err :=db.Delete(&model.User{}, id=?, id).Error; err !=nil { c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()}) return }
c.JSON(http.StatusOK, gin.H{message: User deleted successfully})}
5. 配置路由在项目中创建一个名为`router`的文件夹,并在其中创建一个名为`router.go`的文件,用于配置路由。
gopackage router
import ( github.com/gin-gonic/gin your_project/controller)
func SetupRouter() *gin.Engine { router :=gin.Default()
router.POST(/user, controller.CreateUser) router.GET(/user/:id, controller.GetUser) router.PUT(/user/:id, controller.UpdateUser) router.DELETE(/user/:id, controller.DeleteUser)
return router}
6. 启动服务在项目中创建一个名为`main.go`的文件,用于启动服务。
gopackage main
import ( your_project/router gorm.io/driver/mysql gorm.io/gorm)
func main() { db, err :=gorm.Open(mysql.Open(user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local), &gorm.Config{}) if err !=nil { panic(failed to connect database) }
router :=router.SetupRouter() router.Use(func(c *gin.Context) { c.Set(db, db) })
router.Run(:8080)}
至此,我们已经成功实现了一个基于Go、Kratos和gorm的简单增删改查操作。
一、简介在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤。这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作。
首先假定你已经会使用 gorm 的基本操作。
安装 gorm:
$ go get -u gorm.io/gorm
go: downloading gorm.io/gorm v1.23.5
... ...
GORM 文档:gorm.io/zh_CN/docs/
Go,gorm 和 go-kratos 版本:
二、新建 student 项目go v1.17.10 windows/amd64
go-kratos v2.2.1
gorm v1.23.5
在前面文章中,我们知道可以使用 kratos new 命令,用 kratos-layout 这个模板快速新建出一个项目。
$ kratos new student

