欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

xorm -Find方法实例

程序员文章站 2022-03-20 20:17:04
查询多条数据使用 方法,Find方法的第一个参数为 的指针或 指针,即为查询后返回的结果,第二个参数可选,为查询的条件struct的指针。 go package main import ( "fmt" _ "github.com/go sql driver/mysql" "github.com/go ......

查询多条数据使用find方法,find方法的第一个参数为slice的指针或map指针,即为查询后返回的结果,第二个参数可选,为查询的条件struct的指针。

package main

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
    "log"
    "time"
)

var engine *xorm.engine

type user struct {
    name      string    `xorm:"varchar(25) 'name'"`
    id        int       `xorm:"pk 'id' autoincr"`
    createdat time.time `xorm:"created"`
}

func main() {
    var err error
    engine, err = xorm.newengine("mysql", "root:123456@/test")
    if err != nil {
        log.fatal(err)
        return
    }

    err = engine.createtables(user{})
    if err != nil {
        log.fatal(err)
        return
    }
//下面插入语句第一次运行程序时运行,后面注释掉
  /*
    u := make([]user, 5)
    u[0].name = "abcd"
    u[1].name = "acbd"
    u[2].name = "dbac"
    u[3].name = "cbda"
    u[4].name = "bdca"

    _, err = engine.insert(u)
    if err != nil {
        log.fatal(err)
        return
    }
*/


/*  1) 传入slice用于返回数据
    everyone := make([]userinfo, 0)
    err := engine.find(&everyone)

    peveryone := make([]*userinfo, 0)
    err := engine.find(&peveryone)*/

    users := make([]user,0)
    err = engine.find(&users)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users{
        fmt.println("只传第一个参数,传入slice用于返回数据,index:",i,"user",u.name)
    }
    fmt.println()


    users1 := make([]user,0)
    err = engine.find(&users1)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users1{
        fmt.println("只传第一参数,传入slice用于返回数据,index:",i,"user",u.name)
    }
    fmt.println()


    users2 := make([]user,0)
    s2 := new(user)
    s2.name ="abcd"

    err = engine.find(&users2,s2)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users2{
        fmt.println("传两个参数,传入slice用于返回数据,index:",i,"user",u.name)
    }

    fmt.println()


    users3 := make([]user,0)
    s3 := new(user)
    s3.name ="abcd"
    err = engine.find(&users3,s3)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users3{
        fmt.println("只传第一参数,传入slice用于返回数据,index:",i,"user",u.name)
    }

    fmt.println()
    fmt.println()

    /*2) 传入map用户返回数据,map必须为map[int64]userinfo的形式,map的key为id,因此对于复合主键无法使用这种方式。

    users := make(map[int64]userinfo)
    err := engine.find(&users)

    pusers := make(map[int64]*userinfo)
    err := engine.find(&pusers)*/


    users4 := make(map[int64]user,0)
    err = engine.find(&users4)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users4{
        fmt.println("只传第一个参数,传入map用于返回数据,index:",i,"user",u.name)
    }
    fmt.println()


    users5 := make(map[int64]user,0)
    s5 := new(user)
    s5.name ="abcd"

    err = engine.find(&users5,s5)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users5{
        fmt.println("传两个参数,传入map用于返回数据,index:",i,"user",u.name)
    }

    fmt.println()
    fmt.println()




/*
    3) 也可以加入各种条件
    users := make([]userinfo, 0)
    err := engine.where("age > ? or name = ?", 30, "xlw").limit(20, 10).find(&users)
    */

    users6 := make(map[int64]user,0)
    err = engine.where("name > ?","baaa").find(&users6)
    if err != nil {
        log.fatal(err)
        return
    }

    for i,u := range users6{
        fmt.println("只传第一个参数,传入map用于返回数据,index:",i,"user",u.name)
    }
    fmt.println()




    /*4) 如果只选择单个字段,也可使用非结构体的slice
    var ints []int64
    err := engine.table("user").cols("id").find(&ints)
*/

    var ints []int64
    err = engine.table("user").cols("id").find(&ints)

    if err != nil {
        log.fatal(err)
        return
    }

    for i := range ints{
        fmt.println("如果只选择单个字段,也可使用非结构体的slice,index:",i)
    }
}

/*
输出:
只传第一个参数,传入slice用于返回数据,index: 0 user abcd
只传第一个参数,传入slice用于返回数据,index: 1 user acbd
只传第一个参数,传入slice用于返回数据,index: 2 user dbac
只传第一个参数,传入slice用于返回数据,index: 3 user cbda
只传第一个参数,传入slice用于返回数据,index: 4 user bdca

只传第一参数,传入slice用于返回数据,index: 0 user abcd
只传第一参数,传入slice用于返回数据,index: 1 user acbd
只传第一参数,传入slice用于返回数据,index: 2 user dbac
只传第一参数,传入slice用于返回数据,index: 3 user cbda
只传第一参数,传入slice用于返回数据,index: 4 user bdca

传两个参数,传入slice用于返回数据,index: 0 user abcd

只传第一参数,传入slice用于返回数据,index: 0 user abcd


只传第一个参数,传入map用于返回数据,index: 1 user abcd
只传第一个参数,传入map用于返回数据,index: 2 user acbd
只传第一个参数,传入map用于返回数据,index: 3 user dbac
只传第一个参数,传入map用于返回数据,index: 4 user cbda
只传第一个参数,传入map用于返回数据,index: 5 user bdca

传两个参数,传入map用于返回数据,index: 1 user abcd


只传第一个参数,传入map用于返回数据,index: 3 user dbac
只传第一个参数,传入map用于返回数据,index: 4 user cbda
只传第一个参数,传入map用于返回数据,index: 5 user bdca

如果只选择单个字段,也可使用非结构体的slice,index: 0
如果只选择单个字段,也可使用非结构体的slice,index: 1
如果只选择单个字段,也可使用非结构体的slice,index: 2
如果只选择单个字段,也可使用非结构体的slice,index: 3
如果只选择单个字段,也可使用非结构体的slice,index: 4

*/