golang 使用gorm 将type ThreeScene struct { SceneID string `json:"sceneId" gorm:"primary_key"` Type int `json:"type"` AdditionalData string `json:"additionalData"` Version string `json:"version"` }增删改查 ,且要求SceneID 在数据库内为 int64
时间: 2023-12-15 20:05:52 浏览: 153
golang的序列化与反序列化的几种方式
如果要使用 GORM 实现对 `ThreeScene` 结构体的增删改查操作,并且要求 `SceneID` 在数据库内为 `int64` 类型,可以按照以下步骤进行:
1. 安装 GORM:
```bash
go get -u gorm.io/gorm
```
2. 创建数据库连接:
```go
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "user:password@tcp(host:port)/db_name?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
}
```
其中,`user` 和 `password` 分别为数据库的用户名和密码,`host` 和 `port` 分别为数据库的地址和端口号,`db_name` 为数据库名称。
3. 定义 `ThreeScene` 结构体:
```go
type ThreeScene struct {
SceneID int64 `json:"sceneId" gorm:"primary_key"`
Type int `json:"type"`
AdditionalData string `json:"additionalData"`
Version string `json:"version"`
}
```
注意,这里将 `SceneID` 的类型从 `string` 改为了 `int64`。
4. 创建表格:
```go
func main() {
// ...
db.AutoMigrate(&ThreeScene{})
}
```
这会自动在数据库中创建一个名为 `three_scenes` 的表格,其中包含 `SceneID`、`Type`、`AdditionalData` 和 `Version` 四个字段。
5. 插入数据:
```go
func main() {
// ...
scene := ThreeScene{
SceneID: 1234567890,
Type: 1,
AdditionalData: "some additional data",
Version: "1.0.0",
}
result := db.Create(&scene)
if result.Error != nil {
panic(result.Error)
}
}
```
这会将一个新的 `ThreeScene` 对象插入到数据库中。
6. 查询数据:
```go
func main() {
// ...
var scene ThreeScene
result := db.First(&scene, "scene_id = ?", 1234567890)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
fmt.Println("record not found")
} else {
panic(result.Error)
}
} else {
fmt.Printf("%+v\n", scene)
}
}
```
这会查询数据库中 `SceneID` 为 1234567890 的记录,并将结果保存在 `scene` 变量中。
7. 更新数据:
```go
func main() {
// ...
result := db.Model(&ThreeScene{}).Where("scene_id = ?", 1234567890).Update("additional_data", "new additional data")
if result.Error != nil {
panic(result.Error)
}
}
```
这会将 `SceneID` 为 1234567890 的记录的 `AdditionalData` 字段更新为 "new additional data"。
8. 删除数据:
```go
func main() {
// ...
result := db.Delete(&ThreeScene{}, "scene_id = ?", 1234567890)
if result.Error != nil {
panic(result.Error)
}
}
```
这会删除 `SceneID` 为 1234567890 的记录。
注意,在上面的示例代码中,我们使用了 GORM 的链式调用语法,这可以让我们更方便地构建 SQL 语句。同时,我们还使用了 `result.Error` 来检查操作是否成功,这可以避免出现一些难以排查的错误。
阅读全文