溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang如何實(shí)現(xiàn)查詢分頁

發(fā)布時(shí)間:2023-04-06 10:03:56 來源:億速云 閱讀:147 作者:iii 欄目:編程語言

這篇文章主要介紹“golang如何實(shí)現(xiàn)查詢分頁”,在日常操作中,相信很多人在golang如何實(shí)現(xiàn)查詢分頁問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”golang如何實(shí)現(xiàn)查詢分頁”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

一、golang查詢分頁的實(shí)現(xiàn)方法

1.采用ORM框架

ORM(Object-Relation Mapping)是一種將對(duì)象和關(guān)系數(shù)據(jù)庫之間的映射的程序技術(shù),同時(shí)也是一種編程思想。ORM框架是一種比較成熟的技術(shù),如golang中的GORM,就是一款開源的ORM框架,它能夠?qū)⒔Y(jié)構(gòu)體和數(shù)據(jù)庫表之間進(jìn)行映射,并把CRUD操作轉(zhuǎn)化成數(shù)據(jù)庫查詢語句,從而實(shí)現(xiàn)了數(shù)據(jù)的存儲(chǔ)和讀取。

GORM是golang中最流行的ORM框架之一,它提供了非常簡(jiǎn)單的API操作,即使是初學(xué)者也可以輕松上手。利用GORM,我們可以很方便地實(shí)現(xiàn)基于SQL的分頁查詢,具體實(shí)現(xiàn)代碼如下:

func FindPage(pageNum int, pageSize int) (users []User, total int64, err error) {
    tx := db.Model(&User{})
    tx.Count(&total)
    err = tx.Offset((pageNum - 1)*pageSize).Limit(pageSize).Find(&users).Error
    if err != nil && err != gorm.ErrRecordNotFound {
        return nil, 0, err
    }
    return
}

上述代碼中,我們定義了一個(gè)名為FindPage的函數(shù),用于實(shí)現(xiàn)分頁查詢。首先,我們通過db.Model()方法獲取User模型,然后調(diào)用Count()方法統(tǒng)計(jì)查詢到的總記錄數(shù);接著,采用Offset和Limit方法來實(shí)現(xiàn)分頁,最后調(diào)用Find()方法將查詢結(jié)果存儲(chǔ)在users變量中。此外,在查詢過程中,需要特別注意錯(cuò)誤處理,以確保函數(shù)調(diào)用的安全性和可靠性。

2.自定義分頁查詢函數(shù)

在實(shí)際應(yīng)用中,也可以定義自己的分頁查詢函數(shù),更好地滿足業(yè)務(wù)需求。具體實(shí)現(xiàn)方法如下:

func CustomFindPage(pageNum int, pageSize int, query string) (users []User, total int64, err error) {
    sql := "SELECT * FROM users WHERE 1 = 1 " + query + " ORDER BY created_at DESC LIMIT ? OFFSET ?"
    err = db.Raw(sql, pageSize, (pageNum-1)*pageSize).Scan(&users).Error
    if err != nil && err != gorm.ErrRecordNotFound {
        return nil, 0, err
    }
    err = db.Model(&User{}).Where(query).Count(&total).Error
    if err != nil {
        return nil, 0, err
    }
    return
}

與ORM框架不同,此方法采用了原生SQL語句實(shí)現(xiàn),可以自由定義查詢條件和查詢語句,從而更好地滿足業(yè)務(wù)需求。

二、golang查詢分頁的實(shí)例

1.ORM框架實(shí)現(xiàn)分頁查詢

參考如下代碼:

type User struct {
    gorm.Model
    Name string `gorm:"column:name" json:"name"`
    Age  int    `gorm:"column:age" json:"age"`
}

func main() {
    db, err := gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/demo_golang?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    var (
        pageNum  = 1
        pageSize = 10
        users    []User
        total    int64
    )
    if users, total, err = FindPage(pageNum, pageSize); err != nil {
        fmt.Printf("查詢用戶列表失?。?v\n", err)
        return
    }
    fmt.Printf("查詢到的用戶列表如下:\n%+v\n總記錄數(shù):%d\n", users, total)
}

上述代碼實(shí)現(xiàn)了基于ORM框架的分頁查詢功能。其中,需要先定義User模型,通過GORM進(jìn)行數(shù)據(jù)庫構(gòu)造。隨后,定義一個(gè)名為FindPage()的查詢函數(shù),包含pageNum和pageSize兩個(gè)參數(shù),用于查詢指定頁碼和每頁顯示記錄數(shù)的數(shù)據(jù)。函數(shù)返回兩個(gè)值,一個(gè)是查詢到的用戶列表,一個(gè)是列表總記錄數(shù)。最后,在主函數(shù)中調(diào)用FindPage()函數(shù),即可查詢并輸出分頁查詢結(jié)果。

2.自定義函數(shù)實(shí)現(xiàn)分頁查詢

參考如下代碼:

type User struct {
    Name      string `gorm:"column:name" json:"name"`
    Age       int    `gorm:"column:age" json:"age"`
    CreatedAt int64  `gorm:"column:created_at" json:"created_at"`
}

func main() {
    db, err := gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/demo_golang?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    var (
        pageNum  = 1
        pageSize = 10
        order    = "DESC"
        field    = "created_at"
        query    = ""
        users    []User
        total    int64
    )
    if users, total, err = CustomFindPage(pageNum, pageSize, query, field, order); err != nil {
        fmt.Printf("查詢用戶列表失敗:%v\n", err)
        return
    }
    fmt.Printf("查詢到的用戶列表如下:\n%+v\n總記錄數(shù):%d\n", users, total)
}

上述代碼實(shí)現(xiàn)了基于自定義分頁查詢函數(shù)的查詢分頁功能。其中,需要先定義User模型,在主函數(shù)中設(shè)置查詢的參數(shù)(pageNum、pageSize、field、order、query),然后調(diào)用CustomFindPage()函數(shù)即可實(shí)現(xiàn)分頁查詢。需要注意的是,在自定義查詢函數(shù)中,需要手動(dòng)拼接SQL語句和查詢條件,并采用原生SQL語句進(jìn)行查詢。此外,我們還可以根據(jù)具體需求進(jìn)一步修改自定義分頁查詢函數(shù),實(shí)現(xiàn)更加靈活的查詢。

到此,關(guān)于“golang如何實(shí)現(xiàn)查詢分頁”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI