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

xorm-Iterate/Count/Rows方法实例

程序员文章站 2022-07-02 16:29:15
```go package main import ( "fmt" _ "github.com/go sql driver/mysql" "github.com/go xorm/xorm" "log" "time" ) var engine xorm.Engine type User 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"`
     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