gorm模糊查询和分页查询同时查总条数

  • 分类:【Golang
  • 浏览【137】
  • 评论【0】
  • 更新【2020-3-30 10:29:13】

gorm概述

  • 全功能ORM(几乎)
  • 关联(包含一个,包含多个,属于,多对多,多种包含)
  • Callbacks(创建/保存/更新/删除/查找之前/之后)
  • 预加载(急加载)
  • 事务
  • 复合主键
  • SQL Builder
  • 自动迁移
  • 日志
  • 可扩展,编写基于GORM回调的插件
  • 每个功能都有测试
  • 开发人员友好

已上支持基本满足了日常开发需要,一些基本的查询需求可以查看文档得到解决,不过文档并没有覆盖所有日常开发案例,尤其是一些组合需求,本文挑了一段常见的场景。

func (u *userService) GetuserList(offset, limit int, search User) (users []User, count int, err error) {
	if search.Name != "" {
		u.mysql = u.mysql.Where("name LIKE ?", search.Name+"%")
	}
	if search.Category != "" {
		u.mysql = u.mysql.Where("age =?", search.Age)
	}

	err = u.mysql.Offset(offset).Limit(limit).Find(&users).Offset(-1).Limit(-1).Count(&count).Error
	return users, count, err
}

这简单的一小段已经包含了gorm的模糊查询动态条件分页查询数据条数。 这就是一个最常见的列表查询,列表需要支持条件查询,模糊查询,分页,从代码可以直接看到。

1.if代码是动态组装条件。

2.err = u.mysql.Offset(offset).Limit(limit).Find(&users).Offset(-1).Limit(-1).Count(&count).Error

这行代码包含了数据列表查询和数据条数。

3.有些需要注意的地方是u.mysql.Offset(offset).Limit(limit).Find(&users) 用于查询数据列表,

4..Offset(-1).Limit(-1).Count(&count)用户查询条数,Offset(-1)和Limit(-1)很重要,不加的话会在统计条数后也加上offset和limit,导致查不到条数。 查询结果:

SELECT * FROM `user`   LIMIT 10 OFFSET 0;
SELECT count(*) FROM `user`;