GO语言笔记 | GORM

207 阅读1分钟

查询

🔶 常用

// 查询那个表
db.Model(&User{})
// 查询条件
db.Where("id = ?", 1)
// 查询总数
var total int64
db.Count(&total)
// 排序
db.Order("id desc")
// 每页获取多少数据
limit := 10
db.Limit(limit)
// 第几页
offset := 1
db.Offset(offset)
// 带着关联表的数据
db.Preload("Authority")
// 结果输出到那里
var userList userList{}
db.Find(&userList)

🔶 一对多Has Many

模型定义

// User 人
type User struct {
   ID    uint
   Name  string
   Books []Book
}

// Book 书
type Book struct {
   ID       uint
   BookName string
   UserID   uint
}

迁移 --创建表

db.AutoMigrate(&User{}, &Book{})

创建点数据

var book01 = Book{BookName: "三体"}
var book02 = Book{BookName: "鬼吹灯"}
var user = User{Name: "小辰", Books: []Book{book01, book02}}
var book03 = Book{BookName: "十万个为什么"}
var book04 = Book{BookName: "西游记"}
var book05 = Book{BookName: "语文课本"}
var user01 = User{Name: "小美", Books: []Book{book03, book04, book05}}
db.Create(&user)
db.Create(&user01)

查询案例

  • 查询一个人并把他所有书的信息带出来
    var u User
    db.Model(&User{}).Preload("Books").Find(&u, 2)
    fmt.Println(u)
    
    打印结果:
    {2 小美 [{3 十万个为什么 2} {4 西游记 2} {5 语文课本 2}]}
    
  • 查询 一本书 并把书的主人信息查出来 -- 连表查询
    var books []struct {
       UserName string
       BookName string
    }
    db.Model(&Book{}).
       Select("user.name as user_name, book.book_name").
       Joins("left join user on user.id = book.user_id").
       Where("book.id = ? ", 4).
       Scan(&books)
    fmt.Println(books)
    
    和 sql语句 写法基本一样