gorm 数据库操作

2023-03-20

技术

数据库连接

dsn:="host=localhost user=postgres password=123456 dbname=iot-platform port=5432 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn))

数据模型定义

type UserBasic struct {
    gorm.Model

    Name string
    Age int
}

func (table UserBasic)TableName() string {
    return "user_basic"
}

数据模型-数据表映射

db.AutoMigrate(&UserBasic,...)

CRUD

// 创建记录
user := User{Name: "John", Age: 30}
db.Create(&user)

// 查询记录
var users []User
db.Find(&users)
db.First(&user, 1)

// 更新记录
user.Name = "Tom"
db.Save(&user)

// 删除记录
db.Delete(&user)

原生SQL

rows, err := db.Raw("SELECT name, age FROM users WHERE age > ?", 18).Rows()
defer rows.Close()

for rows.Next() {
    var name string
    var age int

    rows.Scan(&name, &age)

    fmt.Println(name, age)
}

事务

tx := db.Begin()

// 在事务中执行操作
if err := tx.Create(&User{Name: "John", Age: 30}).Error; err != nil {
    // 发生错误时回滚事务
    tx.Rollback()
}

// 成功时提交事务
tx.Commit()

联合查询

var user User
var email Email

db.Joins("JOIN emails ON users.id = emails.user_id").Where("users.name = ?", "John").Find(&user, &email)