安装驱动(如安装go-gorm/mysql则不需引入):
go get github.com/go-sql-driver/mysql
安装gorm:
github.com地址:
go get github.com/go-gorm/ gorm go get github.com/go-gorm/mysql
官方地址:
go get gorm.io/ gorm go get gorm.io/gorm
go mod 依赖配置:
go mod tidy
根据需要创建数据库连接目录(dbtabases):
mysql.go连接文件:
package databases import ( " fmt " " gorm.io/driver/mysql " " gorm.io/gorm " ) var Eloquent * gorm.DB func init() { var err error // 用户名:密码@tcp(数据库ip或域名:端口)/数据库名称?charset=数据库编码&parseTime=True&loc=Local dsn := " root:root@tcp(127.0.0.1:3306)/gin_test?charset=utf8&parseTime=True&loc=Local " Eloquent, err = gorm.Open(mysql.Open(dsn), & gorm.Config{}) if err != nil { fmt.Printf( " mysql connect error %v " , err) } if Eloquent.Error != nil { fmt.Printf( " database error %v " , Eloquent.Error) } }
main.go文件:
// SetMaxIdleConns 是设置空闲时的最大连接数 // SetMaxOpenConns 设置与数据库的最大打开连接数 // SetConnMaxLifetime 每一个连接的生命周期等信息 sqlDB, err := orm.Eloquent.DB() if err != nil { panic(err) } sqlDB.SetMaxIdleConns( 5 ) sqlDB.SetMaxOpenConns( 10 ) sqlDB.SetConnMaxLifetime( - 1 ) // 延时调用函数 defer sqlDB.Close() // 注册路由 router := routers.RegisterRoutes() // 绑定端口是8088 router.Run( " :8088 " )
2.数据表的增删改查实例:
创建一个测试表:
CREATE TABLE `tb_test` ( `id` int ( 10 ) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘ 主键id ‘ , `name` varchar( 255 ) NOT NULL DEFAULT ‘‘ COMMENT ‘ 名称 ‘ , `create_time` datetime NOT NULL COMMENT ‘ 创建时间 ‘ , `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘ 更新时间 ‘ , PRIMARY KEY (`id`) ) ENGINE =InnoDB DEFAULT CHARSET=utf8 COMMENT= ‘ 测试表 ‘ ;
创建一个模型目录及对应控制器/模型文件(curd方法):
模型test.go文件:
package models import ( orm " gin_test/databases " ) type TbTest struct { Id int64 `gorm: " column:id;primary_key;auto_increment " ` Name string `gorm: " column:name;type:varchar(255);size(64);not null " ` CreateTime string `gorm: " column:create_time;not null " ` UpdateTime string `gorm: " column:update_time;not null " ` } func (t *TbTest) TableName() string { return " tb_test " } func ListTest(datas []TbTest, page int ) ([]TbTest, int64, error) { var pageSize = 2 db : = orm.Eloquent offset : = (page - 1 ) * pageSize result : = db.Order( " id desc " ).Offset(offset).Limit(pageSize).Find(& datas) return datas, result.RowsAffected, result.Error } func CreateTest(data TbTest) (int64, error) { db : = orm.Eloquent result : = db.Create(& data) return data.Id, result.Error } func FindTest(id int64) (TbTest, error) { var model TbTest db : = orm.Eloquent result : = db.First(& model, id) return model, result.Error } func UpdateTest(data TbTest, id int64) (int64, error) { var model TbTest db : = orm.Eloquent row : = db.First(& model, id) if row.Error == nil { result : = db.Model(&model).Updates(& data) return model.Id, result.Error } return 0 , row.Error } func DeleteTest(id int64) (int64, error) { var model TbTest db : = orm.Eloquent result : = db.Delete(& model, id) return result.RowsAffected, result.Error }
控制器test.go文件:
package controllers import ( " gin_test/common " " gin_test/models " " github.com/gin-gonic/gin " " net/http " " strconv " ) // 定义接收数据的结构体 type TestData struct { // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段 Id int64 `form: " id " json: " id " uri: " id " xml: " id " ` Name string `form: " name " json: " name " uri: " name " xml: " name " ` } func ListTest(c * gin.Context) { page, _ : = strconv.Atoi(c.Query( " page " )) if page == 0 { page = 1 } var list []models.TbTest res, rows, err : = models.ListTest(list, page) if err != nil { c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } c.JSON(http.StatusOK, gin.H{ " code " : 0 , " list " : res, " pageTotal " : rows}) return } func CreateTest(c * gin.Context) { // 声明接收的变量 var data TestData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } var model models.TbTest var time = common.GetTimeForm(common.GetTimestamp()) model.Name = data.Name model.CreateTime = time model.UpdateTime = time if _, err := models.CreateTest(model); err != nil { c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } c.JSON(http.StatusOK, gin.H{ " code " : 0 , " msg " : " 添加成功 " }) return } func UpdateTest(c * gin.Context) { // 声明接收的变量 var data TestData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } var model models.TbTest res, err : = models.FindTest(data.Id) if err != nil { c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } model.Name = data.Name if _, err := models.UpdateTest(model, res.Id); err != nil { c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } c.JSON(http.StatusOK, gin.H{ " code " : 0 , " msg " : " 更新成功 " }) return } func DeleteTest(c * gin.Context) { // 声明接收的变量 var data TestData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } if _, err := models.DeleteTest(data.Id); err != nil { c.JSON(http.StatusMovedPermanently, gin.H{ " code: " : 1 , " msg: " : err.Error()}) return } c.JSON(http.StatusOK, gin.H{ " code " : 0 , " msg " : " 删除成功 " }) return }
路由文件router.go绑定:
// 测试-数据表增删改查 router.GET( " /test/list " , controllers.ListTest) router.POST( " /test/create " , controllers.CreateTest) router.POST( " /test/update " , controllers.UpdateTest) router.POST( " /test/delete " , controllers.DeleteTest)
数据测试列表:
Get: http://127.0.0.1:8088/test/list?page=1
数据测试添加:
Post: http://127.0.0.1:8088/test/create
数据测试更新:
Post: http://127.0.0.1:8088/test/update
数据测试删除:
Post: http://127.0.0.1:8088/test/update
数据表记录:
到此结束,这就是一个简单的curd使用。
Gin框架结合gorm实现mysql增删改查
标签:varchar 测试表 接收 mod ted 结束 primary idle png
查看更多关于Gin框架结合gorm实现mysql增删改查的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did116733