当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > xorm -Find方法实例

xorm -Find方法实例

2019年05月28日  | 移动技术网IT编程  | 我要评论
查询多条数据使用 方法,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

*/

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网