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 */