• 判断某个记录是否存在可以使用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更高。

xorm -Exist方法实例的更多相关文章

  1. xorm -Find方法实例

    查询多条数据使用Find方法,Find方法的第一个参数为slice的指针或Map指针,即为查询后返回的结果,第二个参数可选,为查询的条件struct的指针. package main import ( ...

  2. xorm -Get方法实例

    查询单条数据使用Get方法,在调用Get方法时需要传入一个对应结构体的指针,同时结构体中的非空field自动成为查询的条件和前面的方法条件组合在一起查询 package main import ( & ...

  3. XQuery的 value() 方法、 exist() 方法 和 nodes() 方法

    Xml数据类型 /*------------------------------------------------------------------------------+ #| = : = : ...

  4. JDBC连接MySQL 方法 实例及资料收集

    JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...

  5. [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  7. 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例

    原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例   部分代码参考http ...

  8. php后台如何避免用户直接进入方法实例

    这篇文章介绍了php后台如何避免用户直接进入方法实例,有需要的朋友可以参考一下 1)创建BaseController控制器继承Controller(后台的一切操作要继承BaseController): ...

  9. 转载---SQL Server XML基础学习之<6>--XQuery的 value() 方法、 exist() 方法 和 nodes() 方法

    /*------------------------------------------------------------------------------+ #| = : = : = : = : ...

随机推荐

  1. Lightning Web Components 来自salesforce 的web 组件化解决方案

    Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...

  2. Vue中插槽slot的使用

    插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个slot最核心的两个问题在这里就点出来了,是显示不显示和怎样显示. 由于插槽是一块模板,所 ...

  3. 【luoguP2995】[USACO10NOV]牛的照片Cow Photographs

    题目链接 首先求出原序列的逆序对个数, 然后考虑每次将目标序列最前面的数放在最后,即最小的数变为最大 设最小数的位置是\(p\),那么逆序对的个数增加了\(n-p\),减少了\(p-1\) #incl ...

  4. 微信小程序前端promise封装

    config.js const config = { base_url_api : "https://douban.uieee.com/v2/movie/", } export { ...

  5. 如何打开 win 10 内置应用

    gpedit.msc windows设置 安全设置 本地策略 安全选项 >> 用户账户控制:用于内置管理员账户的管理员批准模式:已启用

  6. Linux命令及作用

    uname -r :查看当前使用的Linux内核版本信息 cat /proc/cpuinfo:查看当前主机CPU型号,规格等信息 cat /proc/meminfo :查看当前主机内存信息 hostn ...

  7. python3中Requests将verify设置为False后,取消警告的方式

    import requests resp = requests.get('https://www.***.com', verify=False) 调用成功但是会有如下警告信息: InsecureReq ...

  8. socket http tcp ip 区别联系

    功能是实现继承复用.刚才做了一个简要的概述,里面有一些常用的概念,这里做个简短的概念普及介绍:(1),TCP/IP------TPC/IP协议是传输层协议,主要解决数据如何在网络中传输.(2),Soc ...

  9. 对snapshot isolation和write-snapshot isolation的一些思考

    数据库中存在读异常和写异常. 所谓snapshot,目的在于保证事务执行的各个阶段,读相同的数据项得到的结果没有变化,这样一来就避免了不可重复读.幻读等读数据异常. 但是仅仅是读数据不变还不够,因为这 ...

  10. vue 创建监听,和销毁监听(addEventListener, removeEventListener)

    最近在做一个有关监听scroll的功能, 发现我添加监听之后一直不起作用: 1 2 mounted() {     window.addEventListener("scroll" ...