设为首页 加入收藏

TOP

xorm-Iterate/Count/Rows方法实例
2019-05-28 12:08:10 】 浏览:114
Tags:xorm-Iterate/Count/Rows 方法 实例
  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"`
     Money     int       `xorm:" 'money' "`
     Age       int       `xorm:"age"`
     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, 3)
        u[0].Name = "u0"
        u[0].Money = 1
        u[0].Age = 1
        u[1].Name = "u1"
        u[1].Money = 2
        u[1].Age = 1
        u[2].Name = "u2"
        u[2].Money = 3
        u[2].Age = 1
  
        _, err = engine.Insert(u)
        if err != nil {
           log.Fatal(err)
           return
        }*/
  
     /*
        Iterate方法提供逐条执行查询到的记录的方法,他所能使用的条件和Find方法完全相同
        err := engine.Where("age > ? or name=?)", 30, "xlw").Iterate(new(Userinfo), func(i int, bean interface{})error{
           user := bean.(*Userinfo)
           //do somthing use i and user
        })*/
  
     err = engine.Where("id>?", 0).Iterate(new(User), func(i int, bean interface{}) error {
        user := bean.(*User)
        fmt.Println("Iterate方法所有id>0的人的名字为:", user.Name)
        return err
     })
  
     /* func(i int, bean interface{}) error {
           user := bean.(*User)
           fmt.Println("Iterate方法所有id>0的人的名字为:", user.Name)
           return err
        }
     是Iterate的第二个参数,是一个匿名函数
  
  
     func (session *Session) Iterate(bean interface{}, fun IterFunc) error
     type IterFunc func(idx int, bean interface{}) error 定义了一类第一个参数是int,第二个参数是任意类型,返回值是error的函数
     */
  
  
  
  /* Count方法
     统计数据使用Count方法,Count方法的参数为struct的指针并且成为查询条件。
     user := new(User)
     total, err := engine.Where("id >?", 1).Count(user)
  */
  
     u1 := new(User)
     total, err := engine.Where("id >?", 1).Count(u1)
     if err != nil {
        log.Fatal(err)
        return
     }
     fmt.Println("count方法,所有id>1的人总数为:", total)
  
     /*
        Rows方法和Iterate方法类似,提供逐条执行查询到的记录的方法,不过Rows更加灵活好用。
        user := new(User)
        rows, err := engine.Where("id >?", 1).Rows(user)
        if err != nil {
        }
        defer rows.Close()
        for rows.Next() {
           err = rows.Scan(user)
           //...
        }
     */
  
     u2 := new(User)
     rows, err := engine.Where("id >?", 1).Rows(u2)
     if err != nil {
        log.Fatal(err)
        return
     }
     defer rows.Close()
     for rows.Next() {
        err = rows.Scan(u2)
        fmt.Println("Rows方法,所有id>1的人的名字为:", u2.Name)
     }
  }
  
  /*输出:
  Iterate方法所有id>0的人的名字为: u0
  Iterate方法所有id>0的人的名字为: u1
  Iterate方法所有id>0的人的名字为: u2
  count方法,所有id>1的人总数为: 2
  Rows方法,所有id>1的人的名字为: u1
  Rows方法,所有id>1的人的名字为: u2
  
  */
  • id
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇golang两种在for循环中使用gorout.. 下一篇xorm -sum 系列方法实例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目