衣服销售网站建设规划书范文,wordpress 如何更新,南宁网站建设,一个网站如何做seo优化文章目录查询单条记录通过结构体查询对应表指定表并将查询一条记录结果放至字典中按照主键查询查询多行记录按照主键查询使用结构体查询指定表名查询并放至字典列表中指定查询字段查询条件Where 条件#xff08;、like、in#xff09;通过结构体或字典设置查询条件或非排序Li…
文章目录查询单条记录通过结构体查询对应表指定表并将查询一条记录结果放至字典中按照主键查询查询多行记录按照主键查询使用结构体查询指定表名查询并放至字典列表中指定查询字段查询条件Where 条件、like、in通过结构体或字典设置查询条件或非排序LimitOffset汇总筛选去重联合查询(∀)嗨User结构体定义、数据库表设计以及Gorm初始化请参考文章 https://mingvvv.blog.csdn.net/article/details/129026914首先初始化连接池
db : cus_orm.MysqlConnection()查询单条记录
通过结构体查询对应表
user : model.User{}
db.Debug().Take(user) //按照数据库表默认排序
db.Debug().First(user) //按照主键正序 如果没有设置主键 则按照第一个字段排序
db.Debug().Last(user) //按照主键倒序 如果没有设置主键 则按照第一个字段排序
-----------------------------
SELECT * FROM user LIMIT 1
SELECT * FROM user WHERE user.id 521 ORDER BY user.id LIMIT 1
SELECT * FROM user WHERE user.id 521 ORDER BY user.id DESC LIMIT 1查询后实际上会返回一个 DB 指针类型的结果DB结构体的内容如下
type DB struct {*ConfigError errorRowsAffected int64Statement *Statementclone int
}通过接受这个结果我们可以提前判断查询是否出现异常并获取到受影响的行数
result : db.First(user)
//判断是不是没有找到任何一条行信息
if errors.Is(result.Error, gorm.ErrRecordNotFound) {fmt.Println(记录不存在)
}else{fmt.Println(result.RowsAffected)
}指定表并将查询一条记录结果放至字典中
data2 : map[string]interface{}{}
result : db.Debug().Table(user).Take(data2)
------------------------------------------
SELECT * FROM user LIMIT 1这样我们就可以随意查询表中的数据但是要注意的是指定表名是不能使用 First() 和 Last() 函数 因为使用这两个方法生成的SQL语句中会自动加入按照模型主键排序的逻辑又因为上述代码中并没有使用到模型因此最后的SQL会报错 如下
db.Debug().Table(user).First(data2)
----------------------------
SELECT * FROM user ORDER BY id,user. LIMIT 1按照主键查询
db.Debug().First(user, 531) //查询主键是 531 的记录
db.Debug().First(user, id ?, 1b74413f-f3b8-409f-ac47-e8c062e3472a) //主键是string时需要用这种格式
---------------------------------------------------------
SELECT * FROM user WHERE user.id 531 ORDER BY user.id LIMIT 1
SELECT * FROM user WHERE id 1b74413f-f3b8-409f-ac47-e8c062e3472a ORDER BY user.id LIMIT 1查询多行记录
按照主键查询
db.Debug().Find(user, []int{531, 532, 533})
---------------------------------------------------------
SELECT * FROM user WHERE user.id IN (531,532,533)使用结构体查询
var users []model.User
db.Debug().Find(users)
------------------------------
SELECT * FROM user指定表名查询并放至字典列表中
var users []map[string]interface{}
db.Debug().Table(user).Find(users)
//Scan一定要自己指定表名
db.Debug().Table(user).Scan(users)
--------------------------------------------
SELECT * FROM user
SELECT * FROM user指定查询字段
db.Debug().Select(concat(name,age), age).Find(users)
---------------------------------------
SELECT concat(name,age),age FROM user查询条件
Where 条件、like、in
db.Debug().Where(age ?, 18).Find(users)
db.Debug().Where(age ? and name like ?, 18, %测试%).Find(users)
db.Debug().Where(name in ?, []string{测试goper333, 测试goper222}).Find(users)
--------------------------------------------
SELECT * FROM user WHERE age 18
SELECT * FROM user WHERE age 18 and name like %测试%
SELECT * FROM user WHERE name in (测试goper333,测试goper222)Gorm支持在First、Last、FInd方法中添加内嵌查询条件
// Inline 查询条件
db.Debug().Find(users, age ? and name in ?, 18, []string{测试goper333, 测试goper222})
---------------------------------------------
SELECT * FROM user WHERE age 18 and name in (测试goper333,测试goper222)通过结构体或字典设置查询条件
db.Debug().Where(model.User{Name: 姓名}).Find(users)
db.Debug().Where(map[string]interface{}{Name: 姓名}).Find(users)
db.Debug().Where([]int{521, 533}).Find(users) //默认主键的 in 查询
------------------------------------------
SELECT * FROM user WHERE user.name 姓名
SELECT * FROM user WHERE Name 姓名
SELECT * FROM user WHERE user.id IN (521,533)当使用结构体去设置查询条件的时候我们要注意一点 零值0、false、字符串不参与SQL组建 即如果我设置了 Age 0 那个在最后生成的SQL中不会出现 age 0 这样一行条件 如下
userQ : model.User{Name: 姓名, Age: 0}
db.Debug().Where(userQ).Find(users)
-----------------------------------
SELECT * FROM user WHERE user.name 姓名如果想要让零值参与SQL查询我们就要使用字典形式去组建SQL或者使用Raw方法自己写完整SQL。
var users []model.User
db.Debug().Where(map[string]interface{}{Name: 姓名, Age: 0}).Find(users)
db.Debug().Raw(select * from user where name ? and age ?, 姓名, 0).Find(users)
------------------------------------
SELECT * FROM user WHERE Age 0 AND Name 姓名
select * from user where name 姓名 and age 0或
db.Debug().Where(name 测试).Or(model.User{Name: goper222, Age: 18}).Or(map[string]interface{}{id: 526}).Find(users)
------------------------------
SELECT * FROM user WHERE name 测试 OR (user.name goper222 AND user.age 18) OR id 526非
db.Debug().Not(name ?, 姓名).Find(users)
db.Debug().Not(model.User{Name: 姓名, Age: 18}).Find(users) //使用结构体
db.Debug().Not(map[string]interface{}{Name: 姓名, Age: 0}).Find(users) // 使用字典
db.Debug().Not([]int{521, 533}).Find(users) //主键非 条件查询
--------------------------------------------
SELECT * FROM user WHERE NOT name 姓名
SELECT * FROM user WHERE (user.name 姓名 AND user.age 18)
SELECT * FROM user WHERE (Age 0 AND Name 姓名)
SELECT * FROM user WHERE user.id NOT IN (521,533)排序
db.Debug().Order(age desc,name).Find(users)
db.Debug().Order(age desc).Order(name).Find(users)
------------------------------------------------
SELECT * FROM user ORDER BY age desc,nameLimitOffset
db.Debug().Limit(5).Find(users)
db.Debug().Offset(10).Limit(5).Find(users)
-------------------------------
SELECT * FROM user LIMIT 5
SELECT * FROM user LIMIT 5 OFFSET 10汇总筛选
db.Debug().Select(name).Group(name).Find(users)
db.Debug().Select(name).Group(name,age).Having(age 18).Find(users)
------------------------------------------------
SELECT name FROM user GROUP BY name
SELECT name FROM user GROUP BY name,age HAVING age 18去重
db.Debug().Distinct(name).Find(users)
------------------------------------------------
SELECT DISTINCT name FROM user联合查询
db.Debug().Select(a.*).Joins(a left join user_extend b on a.id b.user_id).Find(users)
------------------------------------------------
SELECT a.* FROM user a left join user_extend b on a.id b.user_id