zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    leetcode_697. 数组的度
    645. 错误的集合
    leetcode_448. 找到所有数组中消失的数字
    leetcode_628. 三个数的最大乘积
    leetcode_414. 第三大的数
    leetcode_495. 提莫攻击
    leetcode_485. 最大连续1的个数
    在 Mac、Linux、Windows 下Go交叉编译
    Goland基本操作
    etcd搭建及基本使用
  • 原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10936077.html
Copyright © 2011-2022 走看看