xorm -Exist方法实例
判断某个记录是否存在可以使用
Exist, 相比Get,Exist性能更好。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方法实例的更多相关文章
- xorm -Find方法实例
查询多条数据使用Find方法,Find方法的第一个参数为slice的指针或Map指针,即为查询后返回的结果,第二个参数可选,为查询的条件struct的指针. package main import ( ...
- xorm -Get方法实例
查询单条数据使用Get方法,在调用Get方法时需要传入一个对应结构体的指针,同时结构体中的非空field自动成为查询的条件和前面的方法条件组合在一起查询 package main import ( & ...
- XQuery的 value() 方法、 exist() 方法 和 nodes() 方法
Xml数据类型 /*------------------------------------------------------------------------------+ #| = : = : ...
- JDBC连接MySQL 方法 实例及资料收集
JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...
- [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例 部分代码参考http ...
- php后台如何避免用户直接进入方法实例
这篇文章介绍了php后台如何避免用户直接进入方法实例,有需要的朋友可以参考一下 1)创建BaseController控制器继承Controller(后台的一切操作要继承BaseController): ...
- 转载---SQL Server XML基础学习之<6>--XQuery的 value() 方法、 exist() 方法 和 nodes() 方法
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
随机推荐
- BZOJ 5305: [Haoi2018]苹果树 组合计数
一定要注意要乘阶乘,细节很多. code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s ...
- WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)
.write_cmd_hist 简介 .write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件. 使用形式 .write_cmd_hist Filename 参数 Filename指定 ...
- CLR如何将SEH异常映射到托管异常类型
托管异常处理构建在Windows操作系统的结构化异常处理之上,通常称为SEH.这意味着CLR了解如何在SEH和托管异常系统之间进行互操作,这是一个非常关键的点,因为SEH基于异常代码的概念,而托管异常 ...
- TimescaleDB1.3 的新特性——Continuous aggregates: faster queries with automatically maintained materialized views
One characteristic of time-series data workloads is that the dataset will grow very quickly. Without ...
- mysql 查询账户
查询 mysql 的存在的账户 >select user,host,password from mysql.user; # 可以查询涉及到user. host 链接权限.密码加密文件.
- 开源项目 10 CSV
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using Syst ...
- 浅谈SPFA判负环
目录 SPFA判负环 [前言] [不可代替性] [具体实现] SPFA的过程 判负环 [核心代码] [例题] SPFA判负环 有不足的地方请指出 本蒟蒻一定会修改吼 [前言] 最短路的求法中最广为人知 ...
- Java操作Excel中HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC无定义解决方法
错误原因:jar包版本更新,官方改动: 解决方法: 导入CellType包import org.apache.poi.ss.usermodel.CellType使用CellType.STRING代替H ...
- 【洛谷】P5024 保卫王国 (倍增)
前言 传送门 很多人写了题解了,我就懒得写了,推荐一篇博客 那就分享一下我的理解吧(说得好像有人看一样 对于每个点都只有选与不选两种情况,所以直接用倍增预处理出来两种情况的子树之内,子树之外的最值,最 ...
- 【BIEE】报表导出数据只显示500行,如何解决?
BIEE报表展示的时候每页只显示500行,进而导致导出的时候也只能导出500行,客户抱怨:每次只能导出500行,导出后还得自己合并! 解决思路: 1.找到路径$BIEE_HOME\instances\ ...