经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Gorm入门使用
来源:cnblogs  作者:听风走了八千里  时间:2021/5/31 11:51:44  对本文有异议

Gorm

GORM CRUD 数据库的增删改查

  1. go get -u github.com/jinzhu/gorm
  2. go get -u github.com/jinzhu/gorm/dialects/mysql

go常规查询操作

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "github.com/jinzhu/gorm"
  7. _ "github.com/jinzhu/gorm/dialects/mysql"
  8. )
  9. var db *gorm.DB
  10. // Test 表结构
  11. type Test struct {
  12. ID int `json:"id" db:"id" gorm:"id"`
  13. Username string `json:"username" db:"username" gorm:"username"`
  14. Password string `json:"password" db:"password" gorm:"password"`
  15. Datetime time.Time `json:"datetime" db:"datetime" gorm:"datetime"`
  16. City string `json:"city" db:"city" gorm:"city"`
  17. Country string `json:"country" db:"country" gorm:"country"`
  18. Sex string `json:"sex" db:"sex" gorm:"sex"`
  19. Age string `json:"age" db:"age" gorm:"age"`
  20. }
  21. // TableName 数据库名称规范
  22. func (t Test) TableName() string {
  23. return "test"
  24. }
  25. // Init xx
  26. func Init() (err error) {
  27. db, err = gorm.Open("mysql", "root:1qa2ws3ed@/gouse?charset=utf8&parseTime=True&loc=Local")
  28. if err != nil {
  29. fmt.Println("连接诶数据库失败")
  30. return
  31. }
  32. return err
  33. }
  34. // SelectData 查询单条语句
  35. func SelectData() (err error) {
  36. var info Test
  37. // First根据主键查询单条语句+++++++++++++
  38. //_ = db.First(&info)
  39. ////fmt.Println(info.Username, info.Password, info.Age, info.Datetime)
  40. //marshal, err := json.Marshal(info)
  41. //if err != nil {
  42. // fmt.Println("反序列化失败")
  43. // return
  44. //
  45. //}
  46. //fmt.Println(string(marshal))
  47. // 随机获取条数据++++++++++++++++
  48. //db.Take(&info)
  49. //TakeData, err := json.Marshal(info)
  50. //fmt.Println(string(TakeData))
  51. //// 根据主键查询最后一条记录+++++++++++++
  52. //db.Last(&info)
  53. //LastData, err := json.Marshal(info)
  54. //fmt.Println(string(LastData))
  55. //// 获取所有记录+++++++++++++++
  56. //var infoList []Test
  57. //
  58. //db.Find(&info)
  59. //FindData, err := json.Marshal(infoList)
  60. //fmt.Println(string(FindData))
  61. // First 查询主键为10000的数据(仅当主键为int时)
  62. db.First(&info, 10000)
  63. marshal, err := json.Marshal(info)
  64. fmt.Println(string(marshal))
  65. return err
  66. }
  67. // WhereData where语句查询
  68. func WhereData() (err error) {
  69. // where 条件查询sex 为女的主键第一个
  70. //var info Test
  71. //db.Where("sex = ?", "女").First(&info)
  72. //marshal, err := json.Marshal(info)
  73. //fmt.Println(string(marshal))
  74. // 查询所有sex为男的用户 并统计计数
  75. var infoList []Test
  76. //db.Where("sex = ?", "男").Find(&infoList)
  77. //fmt.Println(len(infoList))
  78. db.Where("id in (?)", []int{1000, 2000}).Find(&infoList)
  79. marshal, err := json.Marshal(infoList)
  80. fmt.Println(string(marshal))
  81. return err
  82. }
  83. // main 主函数
  84. func main() {
  85. _ = Init()
  86. //err := SelectData()
  87. err := WhereData()
  88. if err != nil {
  89. fmt.Println("")
  90. return
  91. }
  92. }
  1. // like 查询
  2. db.Where("username like ?", "%abc%").Find(&infoList)
  3. LikeData, err := json.Marshal(infoList)
  4. fmt.Println(string(LikeData))
  5. return err

注: ?其实就是占位符

  • go结构体转换成map

go map 查询

  1. db.Where(map[string]interface{}{"id": 1000}).Find(&info)
  2. MapData, err := json.Marshal(info)
  3. fmt.Println(string(MapData))
  4. return err

go not查询

  1. // NotSelect Not查询用法
  2. func NotSelect() (err error) {
  3. var infoList []Test
  4. db.Not("id = ?", "1").First(&infoList)
  5. NotLikeData, err := json.Marshal(infoList)
  6. fmt.Println(string(NotLikeData))
  7. db.Not("id in (?)", []int{1, 2, 3, 4, 5}).First(&infoList)
  8. notinData, err := json.Marshal(infoList)
  9. fmt.Println(string(notinData))
  10. return err
  11. }

go or 查询

  1. // OrSelect or查询
  2. func OrSelect() (err error) {
  3. var infoList []Test
  4. db.Where("id = ?", "1").Or("id = ?", "2").Find(&infoList)
  5. OrData, err := json.Marshal(infoList)
  6. fmt.Println(string(OrData))
  7. return err
  8. }

go 内联查询 等同于where条件

  1. // 内联条件
  2. func NeiLian() (err error) {
  3. var info Test
  4. db.Find(&info, "id = ?", "1")
  5. marshal, err := json.Marshal(info)
  6. fmt.Println(string(marshal))
  7. return err
  8. }

Go firstorcreate

获取匹配的第一条记录,否则根据给定的条件创建一个新的记录(仅支持struct or map)

  1. // FirstOrCreate 查询条件后的第一条语句 如果为空 就创建一条记录
  2. func FirstOrCreate() (err error) {
  3. var info Test
  4. db.Where("id = ?", "1000").FirstOrCreate(&info)
  5. marshal, err := json.Marshal(info)
  6. fmt.Println(string(marshal))
  7. return err
  8. }

原文链接:http://www.cnblogs.com/zjaiccn/p/14830433.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号