• xorm -Exist方法实例


    • 判断某个记录是否存在可以使用Exist, 相比GetExist性能更好。

      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
      	}
      	/*
      		has, err := testEngine.Exist(new(RecordExist))
      		// SELECT * FROM record_exist LIMIT 1、
      	*/
      	uu := new(User)
      	uu.Name = "abcd"
      	has, err := engine.Exist(uu)
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	if has {
      		fmt.Println("uu ",uu.Name, uu.Id, uu.CreatedAt)
      	}
      
      	/*
      		has, err = testEngine.Exist(&RecordExist{
      			Name: "test1",
      		})
      		// SELECT * FROM record_exist WHERE name = ? LIMIT 1
      	*/
      	uu0 := &User{Name: "abcd"}
      	has, err = engine.Exist(uu0)
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	if has {
      		fmt.Println("uu0 ",uu0.Name, uu0.Id, uu0.CreatedAt)
      	}
      
      	/*
      		has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{})
      		// SELECT * FROM record_exist WHERE name = ? LIMIT 1
      	*/
      	uu1 := &User{Name: "abcd"}
      	has, err = engine.Where("id =?", 1).Exist(uu1)
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	if has {
      		fmt.Println("uu1 ",uu1.Name, uu1.Id, uu1.CreatedAt)
      	}
      
      	/*
      		has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist()
      		// select * from record_exist where name = ?
      
      	*/
      
      	uu2 := new(User)
      	has, err = engine.SQL("select * from user where id =?", 2).Exist(uu2)
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	if has {
      		fmt.Println("uu2 ",uu2.Name, uu2.Id, uu2.CreatedAt)
      	}
      
      	/*
      		has, err = testEngine.Table("record_exist").Exist()
      		// SELECT * FROM record_exist LIMIT 1
      	*/
      
      	uu3 := new(User)
      	has, err = engine.Table(User{}).Exist(uu3)
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	if has {
      		fmt.Println("uu3 ",uu3.Name, uu3.Id, uu3.CreatedAt)
      	}
      
      	/*
      		has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist()
      		// SELECT * FROM record_exist WHERE name = ? LIMIT 1
      	*/
      	uu4 := new(User)
      	has, err = engine.Table(User{}).Where("name =?", "abcd").Exist(uu4)
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	if has {
      		fmt.Println("uu4 ",uu4.Name, uu4.Id, uu4.CreatedAt)
      	}
      
      }
      
      /*
      输出:
      uu  abcd 0 0001-01-01 00:00:00 +0000 UTC
      uu0  abcd 0 0001-01-01 00:00:00 +0000 UTC
      uu1  abcd 0 0001-01-01 00:00:00 +0000 UTC
      uu2   0 0001-01-01 00:00:00 +0000 UTC
      uu3   0 0001-01-01 00:00:00 +0000 UTC
      uu4   0 0001-01-01 00:00:00 +0000 UTC
      可以发现体存在的情况下,Exist方法不会将查到的实体赋值给参数
      */
      
      
    • 与Get的区别

      • Get与Exist方法返回值都为bool和error,如果查询到实体存在,则Get方法会将查到的实体赋值给参数

        user := &User{Id:1}
        has,err := testEngine.Get(user)	
        // 执行结束后,user会被赋值为数据库中Id为1的实体
        has,err = testEngine.Exist(user)	
        // user中仍然是初始声明的user,不做改变
        
      • 如果你的需求是:判断某条记录是否存在,若存在,则返回这条记录。

      • 建议直接使用Get方法。

      • 如果仅仅判断某条记录是否存在,则使用Exist方法,Exist的执行效率要比Get更高。

  • 相关阅读:
    Android为TV端助力 遥控器的映射
    Android为TV端助力 eclipse出现感叹号的解决办法
    Android为TV端助力 事件分发机制
    Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包
    华为OJ平台——密码强度等级
    华为OJ平台——求最大连续bit数
    华为OJ平台——统计字符串中的大写字母
    Java基础——序列化
    final、finally、finalize的区别
    Java基础——反射
  • 原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10926466.html
Copyright © 2020-2023  润新知