go-zero中集成gorm实现增删改查

📅 2026/7/17 16:58:30
go-zero中集成gorm实现增删改查
1.创建一个zerogorm项目1.准备好api文件shop.apisyntaxv1typeCommonResponse{Codeintjson:codeMessagestringjson:messageDatainterface{}json:data,omitempty// omitempty表示可以data返回也可以不返回Successbooljson:success}import./api/user.apiapi/user.apisyntaxv1type(UserRequest{Idintform:id//get delete传值}AddUserRequest{Usernamestringform:usernameEmailstringform:emailAgeintform:age}UpdateUserRequest{Idintform:idUsernamestringform:username,optionalEmailstringform:email,optionalAgeintform:age,optional})server(group:user// 代表当前service代码块下的路由生成代码时都会被放到focus目录下prefix:/api/user// 前缀)service shop-api{// http://localhost:8888/api/userhandler GetUser get/returns(CommonResponse)// http://localhost:8888/api/user/oneUser?id1handler GetUserById get/oneUser(UserRequest)returns(CommonResponse)handler AddUser post/addUser(AddUserRequest)returns(CommonResponse)handler UpdateUser put/updateUser(UpdateUserRequest)returns(CommonResponse)handler DeleteUserdelete/deleteUser(UserRequest)returns(CommonResponse)}2.生成代码goctl api go--apishop.api--dir.3.安装gormgorm docgo get-ugorm.io/gorm go get-ugorm.io/driver/mysql go mod tidy4.配置mysql连接修改etc\shop-api.yaml在etc\shop-api.yaml中增加mysql连接的配置Name:shop-apiHost:0.0.0.0Port:8888# mysql连接MySQL:DataSource:root:passwordtcp(127.0.0.1:3306)/gozero?charsetutf8mb4parseTimeTruelocLocal修改internal\config\config.goconfig.go接收自定义的Mysql.DataSourcepackageconfigimportgithub.com/zeromicro/go-zero/resttypeConfigstruct{rest.RestConf// 接收自定义的Mysql.DataSourceMysqlstruct{DataSourcestring}}修改internal\svc\servicecontext.gointernal\svc\servicecontext.go中开启数据库连接并且将数据库连接放入上下文packagesvcimport(zerogorm/internal/configgithub.com/zeromicro/go-zero/core/logxgorm.io/driver/mysqlgorm.io/gorm)typeServiceContextstruct{Config config.Config// 数据库连接DB*gorm.DB}funcNewServiceContext(c config.Config)*ServiceContext{// 开启数据库连接dbClient,err:gorm.Open(mysql.Open(c.Mysql.DataSource),gorm.Config{})iferr!nil{logx.Error(连接数据库失败,err)panic(err)}// 数据库连接放入上下文returnServiceContext{Config:c,DB:dbClient,}}5.使用数据库连接增加一个自定义类models\gorm\user.gopackagegormtypeUserstruct{Idintjson:idUsernamestringjson:usernameEmailstringjson:emailAgeintjson:age}// 配置操作数据库的表func(User)TableName()string{returnuser}修改internal\logic\user\adduserlogic.gofunc(l*AddUserLogic)AddUser(req*types.AddUserRequest)(resp*types.CommonResponse,errerror){user:gorm.User{Username:req.Username,Age:req.Age,Email:req.Email,}errl.svcCtx.DB.Create(user).Erroriferr!nil{returntypes.CommonResponse{Code:500,Success:false,Message:err.Error(),},nil}else{returntypes.CommonResponse{Code:200,Success:true,Message:添加成功,},nil}}修改internal\logic\user\deleteuserlogic.gofunc(l*DeleteUserLogic)DeleteUser(req*types.UserRequest)(resp*types.CommonResponse,errerror){id:req.Id user:gorm.User{}errl.svcCtx.DB.Where(id?,id).Delete(user).Erroriferr!nil{returntypes.CommonResponse{Code:500,Success:false,Message:err.Error(),},nil}else{returntypes.CommonResponse{Code:200,Success:true,Message:删除成功,},nil}}修改internal\logic\user\getuserbyidlogic.gofunc(l*GetUserByIdLogic)GetUserById(req*types.UserRequest)(resp*types.CommonResponse,errerror){id:req.Id user:gorm.User{}errl.svcCtx.DB.Where(id?,id).First(user).Erroriferr!nil{returntypes.CommonResponse{Code:500,Success:false,Message:err.Error(),},nil}returntypes.CommonResponse{Code:200,Success:true,Data:user,Message:查询成功,},nil}修改internal\logic\user\getuserlogic.gofunc(l*GetUserLogic)GetUser()(resp*types.CommonResponse,errerror){// 获取所有数据user:[]gorm.User{}l.svcCtx.DB.Find(user)returntypes.CommonResponse{Code:200,Message:查询成功,Success:true,Data:user,},nil}修改internal\logic\user\updateuserlogic.gofunc(l*UpdateUserLogic)UpdateUser(req*types.UpdateUserRequest)(resp*types.CommonResponse,errerror){user:gorm.User{Id:req.Id,Username:req.Username,Age:req.Age,Email:req.Email,}// 1.更新所有字段使用save// err l.svcCtx.DB.Save(user).Error// 2.更新部分数据使用updateserrl.svcCtx.DB.Where(id?,req.Id).Updates(user).Erroriferr!nil{returntypes.CommonResponse{Code:500,Success:false,Message:err.Error(),},nil}else{returntypes.CommonResponse{Code:200,Success:true,Message:修改成功,},nil}}2.启动项目fresh运行启动freshgo run运行启动go run shop.go-fetc/shop-api.yaml编译后运行启动go build..\zerogorm.exe调试启动.vscode\launch.json{version:0.2.0,configurations:[{name:Launch shop.go,type:go,request:launch,mode:auto,program:${workspaceFolder}/shop.go,args:[-f,etc/shop-api.yaml]}]}3.测试项目测试查询curl--locationhttp://localhost:8888/api/usercurl--locationhttp://localhost:8888/api/user/oneUser?id1测试新增curl--locationhttp://localhost:8888/api/user/addUser\--headerContent-Type: application/x-www-form-urlencoded\--data-urlencodeusernametitlex\--data-urlencodeage22\--data-urlencodeemail1测试修改curl--location--requestPUThttp://localhost:8888/api/user/updateUser\--headerContent-Type: application/x-www-form-urlencoded\--data-urlencodeusername77\--data-urlencodeage77\--data-urlencodeemail77\--data-urlencodeid6测试删除curl--location--requestDELETEhttp://localhost:8888/api/user/deleteUser?id4