zoukankan      html  css  js  c++  java
  • xorm -Find方法实例

    查询多条数据使用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
    
    */
    
    
  • 相关阅读:
    c语言知识
    数字地与模拟地
    C语言实现顺序表(增删)
    传统数据库、Nosql数据库与云数据库区别?
    大数据处理架构如何
    warning: implicit declaration of function 'func1' [-Wimplicit-function-declaration]
    window10创建virtualenv虚拟环境
    二叉树的实现以及三种遍历方法--代码
    损失函数--KL散度与交叉熵
    市场回测与对冲套利
  • 原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10932551.html
Copyright © 2011-2022 走看看