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

    1. package main
    2. import (
    3. "fmt"
    4. _ "github.com/go-sql-driver/mysql"
    5. "github.com/go-xorm/xorm"
    6. "log"
    7. "time"
    8. )
    9. var engine *xorm.Engine
    10. type User struct {
    11. Name string `xorm:"varchar(25) 'name'"`
    12. Id int `xorm:"pk 'id' autoincr"`
    13. CreatedAt time.Time `xorm:"created"`
    14. }
    15. func main() {
    16. var err error
    17. engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    18. if err != nil {
    19. log.Fatal(err)
    20. return
    21. }
    22. err = engine.CreateTables(User{})
    23. if err != nil {
    24. log.Fatal(err)
    25. return
    26. }
    27. u := make([]User, 5)
    28. u[0].Name = "abcd"
    29. u[1].Name = "acbd"
    30. u[2].Name = "dbac"
    31. u[3].Name = "cbda"
    32. u[4].Name = "bdca"
    33. _, err = engine.Insert(u)
    34. if err != nil {
    35. log.Fatal(err)
    36. return
    37. }
    38. /*
    39. has, err := testEngine.Exist(new(RecordExist))
    40. // SELECT * FROM record_exist LIMIT 1、
    41. */
    42. uu := new(User)
    43. uu.Name = "abcd"
    44. has, err := engine.Exist(uu)
    45. if err != nil {
    46. log.Fatal(err)
    47. return
    48. }
    49. if has {
    50. fmt.Println("uu ",uu.Name, uu.Id, uu.CreatedAt)
    51. }
    52. /*
    53. has, err = testEngine.Exist(&RecordExist{
    54. Name: "test1",
    55. })
    56. // SELECT * FROM record_exist WHERE name = ? LIMIT 1
    57. */
    58. uu0 := &User{Name: "abcd"}
    59. has, err = engine.Exist(uu0)
    60. if err != nil {
    61. log.Fatal(err)
    62. return
    63. }
    64. if has {
    65. fmt.Println("uu0 ",uu0.Name, uu0.Id, uu0.CreatedAt)
    66. }
    67. /*
    68. has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{})
    69. // SELECT * FROM record_exist WHERE name = ? LIMIT 1
    70. */
    71. uu1 := &User{Name: "abcd"}
    72. has, err = engine.Where("id =?", 1).Exist(uu1)
    73. if err != nil {
    74. log.Fatal(err)
    75. return
    76. }
    77. if has {
    78. fmt.Println("uu1 ",uu1.Name, uu1.Id, uu1.CreatedAt)
    79. }
    80. /*
    81. has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist()
    82. // select * from record_exist where name = ?
    83. */
    84. uu2 := new(User)
    85. has, err = engine.SQL("select * from user where id =?", 2).Exist(uu2)
    86. if err != nil {
    87. log.Fatal(err)
    88. return
    89. }
    90. if has {
    91. fmt.Println("uu2 ",uu2.Name, uu2.Id, uu2.CreatedAt)
    92. }
    93. /*
    94. has, err = testEngine.Table("record_exist").Exist()
    95. // SELECT * FROM record_exist LIMIT 1
    96. */
    97. uu3 := new(User)
    98. has, err = engine.Table(User{}).Exist(uu3)
    99. if err != nil {
    100. log.Fatal(err)
    101. return
    102. }
    103. if has {
    104. fmt.Println("uu3 ",uu3.Name, uu3.Id, uu3.CreatedAt)
    105. }
    106. /*
    107. has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist()
    108. // SELECT * FROM record_exist WHERE name = ? LIMIT 1
    109. */
    110. uu4 := new(User)
    111. has, err = engine.Table(User{}).Where("name =?", "abcd").Exist(uu4)
    112. if err != nil {
    113. log.Fatal(err)
    114. return
    115. }
    116. if has {
    117. fmt.Println("uu4 ",uu4.Name, uu4.Id, uu4.CreatedAt)
    118. }
    119. }
    120. /*
    121. 输出:
    122. uu abcd 0 0001-01-01 00:00:00 +0000 UTC
    123. uu0 abcd 0 0001-01-01 00:00:00 +0000 UTC
    124. uu1 abcd 0 0001-01-01 00:00:00 +0000 UTC
    125. uu2 0 0001-01-01 00:00:00 +0000 UTC
    126. uu3 0 0001-01-01 00:00:00 +0000 UTC
    127. uu4 0 0001-01-01 00:00:00 +0000 UTC
    128. 可以发现体存在的情况下,Exist方法不会将查到的实体赋值给参数
    129. */
  • 与Get的区别

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

      1. user := &User{Id:1}
      2. has,err := testEngine.Get(user)
      3. // 执行结束后,user会被赋值为数据库中Id为1的实体
      4. has,err = testEngine.Exist(user)
      5. // 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. REdis之maxmemory解读

    redis.conf中的maxmemory定义REdis可用最大物理内存,有多种书写方式,以下均为合法: maxmemory 1048576 maxmemory 1048576B maxmemory  ...

  2. 微信小程序class封装http

    config.js var config = { base_api_url:"https://douban.uieee.com/v2/" } export {config} uti ...

  3. Java连接excel实现:通过姓名查找id和通过id查找姓名

    注意每个方法结束都要关闭workbook: 还有getIdbyname()方法中字符串flag与name的比较,一定要用equals()方法!!!: 剩下的不多解释,注释都在代码中: import j ...

  4. 改进欧拉公式求解常微分方程(c++)

    #include<iostream> #include<iomanip> using namespace std; int main() { double x,y,h,temp ...

  5. js十大排序算法收藏

    十大经典算法排序总结对比 转载自五分钟学算法&https://www.cnblogs.com/AlbertP/p/10847627.html 一张图概括: 主流排序算法概览 名词解释: n: ...

  6. 第07组 Beta冲刺(2/5)

    队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器 展示GitHub当日代码/文档签入记录:(组内共用,已询问过助教小姐姐) ...

  7. python项目总结--学生选课

    题目要求: 根据业务需求,现要对慕课学院(1)班的所有学员进行选修课程分配,使得每一名学生都可以选修到一门课程.具体要求如下: 1.自定义学生信息.课程信息.教师信息三者的具体描述 2.自定义exam ...

  8. Thinking In SE

    各种编程范式的区别 并发模型 并行架构: 位级(bit-level)并行 指令级(instruction-level)并行 数据级(data)并行 数据级并行 任务级(task-level)并行 -- ...

  9. uniapp - picker

    [普通json数组] 针对官方的普通json数组示例,做些填充 <template> <view> <view class="uni-title uni-com ...

  10. Zookeeper运维常用四字命令

    Zookeeper运维常用四字命令 echo stat|nc 127.0.0.1 2181 查看哪个节点被选择作为follower或者leader 使用echo ruok|nc 127.0.0.1 2 ...