go 学习 第二十八章 Go语言 gorm 使用limit , offset, count 实现分页

1.  Limit 

     Limit 指定要查询的最大记录数。

     示例:

      取出时间倒叙的最后5条记录

db.Order("created_at desc").Limit(5).Find(&users)

2.  Offset

     Offset指定开始返回记录前要跳过的记录数。      

     ※ offset 需要配合limit 使用

db.Limit(5).Offset(5).Order("created_at desc").Find(&users)

3. count

    获取模型的记录数。

   ※ 使用count  不能用 Offset 或将Offset值设为 -1(-1代表取消offset限制)

            否则会报 :sql: no rows in result set  的错误。

db.Limit(5).Offset(-1).Order("created_at desc").Find(&users).Count(&count)

// 或 

db.Model(&User{}).Where("name = ?", "jinzhu").Count(&count)

4.  分页实例

package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

type User struct {
	gorm.Model
	Name string `gorm:"default:''"`
	IsMan bool `gorm:"not null;default:false"`
	Price *int `gorm:"default:0"`
}


func main() {
	db, err := gorm.Open("mysql", "root:root@/gormdb?charset=utf8&parseTime=True&loc=Local")
	defer db.Close()
	if err != nil {
		panic(err)
	}

	defer db.Close()
	//生成数据库表
	//db.AutoMigrate(&User{})

	//db.Create(&User{Name:"shijia1"})

	var users []User

	var page int = 2
	var pageSize int = 5
	var total int = 0

	// 获取取指page,指定pagesize的记录
	db.Where("price >= ?",0).Limit(pageSize).Offset((page-1)*pageSize).Order("created_at desc").Find(&users)

	// 获取总条数
	db.Model(&User{}).Where("price >= ?",0).Count(&total)
	fmt.Println(users,"总数:",total)



}

 

你可能感兴趣的:(go)