30
05月
2025
package main
import (
"database/sql/driver"
"encoding/json"
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type CustomTime struct {
time.Time
}
const layout = "2006-01-02 15:04:05"
// 数据库 -> 结构体
func (ct *CustomTime) Scan(value interface{}) error {
if t, ok := value.(time.Time); ok {
ct.Time = t
}
return nil
}
// 结构体 -> 数据库
func (ct CustomTime) Value() (driver.Value, error) {
return ct.Time, nil
}
// JSON序列化(控制API输出格式)
func (ct CustomTime) MarshalJSON() ([]byte, error) {
return []byte(`"` + ct.Format(layout) + `"`), nil
}
type Commonmodel struct {
ID int `json:"id"`
CreatedAt CustomTime `gorm:"column:createtime" json:"createtime"`
UpdatedAt CustomTime `gorm:"column:updatetime" json:"updatetime"`
DeletedAt gorm.DeletedAt `gorm:"column:deletetime" json:"deletetime"` //软删除字段
}
type User struct {
Commonmodel
Name string `gorm:"column:name" json:"name"`
Age int `gorm:"column:age" json:"age"`
}
func (User) TableName() string {
return "person"
}
var Db *gorm.DB
func init() {
dsn := "root:root@tcp(127.0.0.1:3306)/fa?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("open mysql failed,", err)
return
}
Db = db
}
func insertdata(user User, tx *gorm.DB) int {
result := tx.Create(&user) // 通过数据的指针来创建
fmt.Println(result.Error, result.RowsAffected)
if result.Error != nil {
//事务回滚
tx.Rollback()
return 0
}
return user.ID
}
func selectdata(id int, tx *gorm.DB) User {
var user User
// result := Db.First(&user, id)
result := tx.Model(&User{}).Where("id = ?", id).Limit(10).Find(&user)
fmt.Println(result.Error, result.RowsAffected)
return user
}
func updatedata(id int, user User, tx *gorm.DB) {
user.Age = 26
user.Name = "Xiaoming"
result := tx.Save(&user)
// user := User{Name: "Xiaoming", Age: 25}
// result := Db.Model(&User{}).Where("id = ?", id).Updates(user)
fmt.Println(result.Error, result.RowsAffected)
if result.Error != nil {
tx.Rollback()
return
}
}
func deletedata(id int, tx *gorm.DB) {
// result := Db.Delete(&User{}, id)
result := tx.Where("id = ?", id).Delete(&User{})
fmt.Println(result.Error, result.RowsAffected)
if result.Error != nil {
tx.Rollback()
return
}
}
func main() {
//开启事务
tx := Db.Begin()
user := User{Name: "Jinzhu", Age: 18}
var id int = insertdata(user, tx)
if id == 0 {
fmt.Println("添加失败")
return
}
user = selectdata(id, tx)
jsonuser, _ := json.Marshal(user)
fmt.Println(string(jsonuser))
updatedata(id, user, tx)
user = selectdata(id, tx)
jsonuser, _ = json.Marshal(user)
fmt.Println(string(jsonuser))
deletedata(id, tx)
//提交事务
tx.Commit()
}
非特殊说明,本文版权归 Code. 所有,转载请注明出处.
本文标题: golang使用gorm 操作数据库
延伸阅读
学习golang(四) golang连接数据库 增删改查以及事物 学习golang(九) 学习golang(三) 学习golang(七)最新|与我有关