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)