查询

//通过主键查询第一条记录
db.First(&user)
//// SELECT * FROM users ORDER BY id LIMIT 1; // 随机取一条记录
db.Take(&user)
//// SELECT * FROM users LIMIT 1; // 通过主键查询最后一条记录
db.Last(&user)
//// SELECT * FROM users ORDER BY id DESC LIMIT 1; // 拿到所有的记录
db.Find(&users)
//// SELECT * FROM users; // 查询指定的某条记录(只可在主键为整数型时使用)
db.First(&user, 10)
//// SELECT * FROM users WHERE id = 10;

Where 条件

普通 SQL

// 获取第一条匹配的记录
db.Where("name = ?", "jinzhu").First(&user)
//// SELECT * FROM users WHERE name = 'jinzhu' limit 1; // 获取全部匹配的记录
db.Where("name = ?", "jinzhu").Find(&users)
//// SELECT * FROM users WHERE name = 'jinzhu'; // <>
db.Where("name <> ?", "jinzhu").Find(&users) // IN
db.Where("name IN (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users) // LIKE
db.Where("name LIKE ?", "%jin%").Find(&users) // AND
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users) // 时间
db.Where("updated_at > ?", lastWeek).Find(&users) // BETWEEN
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)

Struct & Map

// Struct
db.Where(&User{Name: "jinzhu", Age: 20}).First(&user)
//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1; // Map
db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)
//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20; // 主键的切片
db.Where([]int64{20, 21, 22}).Find(&users)
//// SELECT * FROM users WHERE id IN (20, 21, 22);

提示 当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,'', false 或者其他 零值时,将不会被用于构建查询条件,例如:

db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users)
//// SELECT * FROM users WHERE name = "jinzhu";

你可以使用指针或实现 Scanner/Valuer 接口来避免这个问题.

// 使用指针
type User struct {
gorm.Model
Name string
Age *int
} // 使用 Scanner/Valuer
type User struct {
gorm.Model
Name string
Age sql.NullInt64 // sql.NullInt64 实现了 Scanner/Valuer 接口
}

选择字段

Select,指定你想从数据库中检索出的字段,默认会选择全部字段。

db.Select("name, age").Find(&users)
//// SELECT name, age FROM users; db.Select([]string{"name", "age"}).Find(&users)
//// SELECT name, age FROM users; db.Table("users").Select("COALESCE(age,?)", 42).Rows()
//// SELECT COALESCE(age,'42') FROM users;

最新文章

  1. 客户端的验证插件validator
  2. LINUX中简单的字符命令
  3. Changing Project Binding to Surround SCM Integration Provider with Visual Studio 2010
  4. cron语法
  5. mysql大小写问题
  6. [转]20位活跃在Github上的国内技术大牛
  7. VFL +AutoLayout
  8. linux中mysql基本操作
  9. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
  10. 【WCF--初入江湖】10 序列化和传输大型数据流
  11. python学习day4--python基础--元组,字符串
  12. 通过MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件
  13. linux下删除内核
  14. Android总结的基本机制监控事件
  15. Asynchronous vs synchronous client applications(MQTT)
  16. DML、DDL、DCL的分别是什么
  17. Generative Adversarial Nets[Introduction]
  18. 着色器语言 GLSL (opengl-shader-language)入门大全
  19. [NOI 2016]国王饮水记
  20. HDU 2056 龟兔赛跑 (DP)

热门文章

  1. 深入js系列-语法
  2. sql server 2016 AlwaysOn实现无域高可用全教程
  3. 使用dozer将DTO转化为DO
  4. redis为何单线程 效率还这么高 为何使用跳表不使用B+树做索引(阿里)
  5. Python OpenCV4获取轮廓最大内切圆和外接圆
  6. Appium Grid并发测试
  7. linux下安装谷歌拼音输入法
  8. BBC micro:bit引脚介绍
  9. ubuntu 17.04 下搭建深度学习环境
  10. [转帖]systemd 开机无法启动privoxy