本文共 2231 字,大约阅读时间需要 7 分钟。
0.特殊情况
解决 sql肯定有问题,把sql.log(true)打开,一句句过
1.建表语句
type ExportOpt struct { ProductId int Name string}ds.Gorm().Debug().AutoMigrate(&ExportOpt{})
2.执行原生sql
// Scantype Result struct { Name string Age int}var result Resultdb.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)
3.事务
// 开始事务tx := db.Begin()// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')tx.Create(...)// ...// 发生错误时回滚事务tx.Rollback()// 或提交事务tx.Commit()//具体例子func CreateAnimals(db *gorm.DB) err { tx := db.Begin() // 注意,一旦你在一个事务中,使用tx作为数据库句柄 if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil { tx.Rollback() return err } if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil { tx.Rollback() return err } tx.Commit() return nil}
4.sql.Raw
row := db.Table("users").Where("name = ?", "jinzhu").Select("name, age").Row() // (*sql.Row)row.Scan(&name, &age)rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() { ... rows.Scan(&name, &age, &email) ...}// Raw SQLrows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() { ... rows.Scan(&name, &age, &email) ...}
5.showSql 打印sql
// 启用Logger,显示详细日志db.LogMode(true)
6.添加模型model
// 基本模型的定义type Model struct { ID uint `gorm:"primary_key"` CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time}// 添加字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`type User struct { gorm.Model Name string}
7.关联查询
// User 包含一个 CreditCard, UserID 为外键type User struct { gorm.Model CreditCard CreditCard}type CreditCard struct { gorm.Model UserID uint Number string}var card CreditCarddb.Model(&user).Related(&card, "CreditCard") SELECT * FROM credit_cards WHERE user_id = 123; // 123 is user's primary key// CreditCard是user的字段名称,这意味着获得user的CreditCard关系并将其填充到变量// 如果字段名与变量的类型名相同,如上例所示,可以省略,如:db.Model(&user).Related(&card)
8.指定table查询
type Result struct { Name string Age int}var result Resultdb.Table("users").Select("name, age").Where("name = ?", 3).Scan(&result)// Raw SQLdb.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)
转载地址:http://cypmf.baihongyu.com/