首页 > 数据库 >使用Gin框架往数据库插入记录

使用Gin框架往数据库插入记录

时间:2024-01-21 20:57:06浏览次数:36  
标签:responseData return err nil 数据库 插入 Gin gorm string

首先往数据库插入数据,就需要连接数据库(笔者此处使用的是PostgreSQL)

因此在项目中引入如下依赖(这两个依赖版本号不一致,可能会出现异常)

gorm.io/driver/postgres  // 依赖是用于连接和操作 PostgreSQL 数据库

gorm.io/gorm  // 对象关系映射 (ORM) 库,简化 Golang 程序与数据库的交互

引入依赖

require (
	github.com/gin-gonic/gin v1.9.1
	gorm.io/driver/postgres v1.2.3
	gorm.io/gorm v1.22.3
)

创建web应用,并定义接口

type User struct {
	ID         uint `gorm:"primaryKey"`
	Mobile     string
	Password   string
	Firstname  string
	Lastname   string
	Role       string
	CreateTime time.Time `gorm:"column:create_time"`
	UpdateTime time.Time `gorm:"column:update_time"`
}

type ResponseData struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

func main() {
	// 创建Gin的实例
	r := gin.Default()

	// 定义路由处理程序
	r.GET("/ok", okHandler)
	r.POST("/insert", insertHandler)

	// 启动Gin服务
	if err := r.Run(":8080"); err != nil {
		// 处理启动服务时的错误
		fmt.Println("启动Gin服务失败:", err)
	}
}

func insertHandler(c *gin.Context) {
	// 连接数据库
	db, err := connectToDatabase()
	if err != nil {
		responseData := ResponseData{
			Code:    "500",
			Message: "连接失败",
		}
		c.JSON(500, responseData)
		return
	}
	// 从请求体中解析 JSON 数据到 User 结构体
	var newUser User
	if err := c.ShouldBindJSON(&newUser); err != nil {
		responseData := ResponseData{
			Code:    "400",
			Message: "请求体格式错误",
		}
		c.JSON(400, responseData)
		return
	}
	newUser.CreateTime = time.Now()
	newUser.UpdateTime = time.Now()
	err = insertDataToDatabase(db, newUser)
	if err != nil {
		responseData := ResponseData{
			Code:    "500",
			Message: "插入失败",
		}
		c.JSON(500, responseData)
		return
	}
	responseData := ResponseData{
		Code:    "200",
		Message: "success",
	}
	c.JSON(200, responseData)
}

func connectToDatabase() (*gorm.DB, error) {
	dsn := "host=ipAddr user=postgres password=postgres dbname=test port=5432 sslmode=disable TimeZone=Asia/Shanghai"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if err != nil {
		return nil, err
	}
	return db, nil
}

func insertDataToDatabase(db *gorm.DB, user User) error {
	if err := db.Table("_user").Create(&user).Error; err != nil {
		return err
	}
	return nil
}

 测试

curl -X POST -H "Content-Type: application/json" -d '{
    "mobile": "152222111x",
    "password": "password",
    "firstname": "Alex",
    "lastname": "Danne",
    "role": "USER"
}' http://localhost:8080/insert

在PostgreSQL数据库查看到对应记录,成功!

标签:responseData,return,err,nil,数据库,插入,Gin,gorm,string
From: https://www.cnblogs.com/ashet/p/17978339

相关文章

  • AtCoder Beginner Contest 337
    基本情况ABC秒了,D数组在空间复杂度上面第一次疯狂吃亏,吃了两次罚时过。赛后看官方题解,发现C做法薄纱我。C-LiningUp2https://atcoder.jp/contests/abc337/tasks/abc337_c这题一眼链表,我用双向链表实现,代码石山。官方题解就题论题,更本质。其实这题并没必要开双向链......
  • margin上边距下边距覆盖
    margin上边距下边距覆盖首先,我们知道水平间距不会重合覆盖但是,两个或多个块级盒子的垂直相邻边界会重合。边界宽度结果的如下:如果都是正值:相邻边界宽度中最大的值。如果有一个负值:在最大的正边界中减去绝对值最大的负边界。如果都是负值:从零中减去绝对值最大的负边界。......
  • 【数据库】 PostgreSQL中的VACUUM作用
    VACUUM命令,它可以有效地清理和整理数据库中的数据,提高查询性能和存储效率。VACUUM的作用回收空闲空间:VACUUM可以回收已经释放的空闲空间,使得这些空间可以被重新使用,从而提高数据库的存储效率。压缩数据:VACUUM可以对数据库中的数据进行压缩,减少数据的占用空间,进一步提高存储......
  • 【数据库】 PostgreSQL中的VACUUM作用
    VACUUM命令,它可以有效地清理和整理数据库中的数据,提高查询性能和存储效率。VACUUM的作用回收空闲空间:VACUUM可以回收已经释放的空闲空间,使得这些空间可以被重新使用,从而提高数据库的存储效率。压缩数据:VACUUM可以对数据库中的数据进行压缩,减少数据的占用空间,进一步提高存储......
  • NGINX sub_filter和subs_filter 指令讲解
    目录一、概述二、nginx环境部署三、sub_filter四、subs_filter一、概述在NGINX中,sub_filter和subs_filter是两个用于替换响应内容中字符串的指令,它们主要用于反向代理和修改响应内容。下面是它们之间的主要区别:sub_filter是基本的字符串替换,不支持正则表达式。subs_fi......
  • Java连接8.0版本以上的数据库
    一.连接数据库在使用Java连接8.0版本以上的数据库时,可以按照如下步骤:下载需要的包,本次教程中使用的是下面这个版本。该驱动网上有许多资源,可根据自己的需求下载。建立与数据库的连接单元在合适的包下新建"DButil.java"文件并输入如下代码:importjava.sql.Connecti......
  • 在Java中连接8.0版本以上的Mysql数据库
    一.连接数据库在使用Java连接8.0版本以上的数据库时,可以按照如下步骤:下载需要的包,本次教程中使用的是下面这个版本。该驱动网上有许多资源,可根据自己的需求下载。建立与数据库的连接单元在合适的包下新建"DButil.java"文件并输入如下代码:importjava.sql.Connecti......
  • 记录迁移mongdb数据库
    在Windows系统上,默认情况下,MongoDB的数据库文件存储在以下位置: C:\ProgramFiles\MongoDB\Server\<版本号>\data\db这是MongoDB安装程序的默认路径。<版本号> 是MongoDB的版本号,例如 4.4 或 5.0。请注意,如果你在安装MongoDB时选择了不同的安装路径,那么数据库......
  • Toyota Programming Contest 2024#1(AtCoder Beginner Contest 337)
    ToyotaProgrammingContest2024#1(AtCoderBeginnerContest337)比赛链接A-Scoreboard思路简单的模拟,统计一下总分数就可以了Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){ intn; intans1=0; intans2=0; cin>>n; for......
  • AtCoder Beginner Contest 337
    AtCoderBeginnerContest337赛后总结A题不多说,纯水。B题对题目要求没有理解太透(不知道是英语问题,还是它样例给的不够全,没太能理解最后的那个判断结果)卡c题上了c题感觉其实是个比较有意思的题,但是只要理解了题目就知道本质是一个求数组对应的下标,再以数组的下标所对应的数组......