• GoLang连接mysql数据库


    跟着文档走
    GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

    1.使用命令拉取
     

    go get -u gorm.io/gorm
    go get -u gorm.io/driver/sqlite
    

    2.开始使用
     

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gin-gonic/gin"
    5. "gorm.io/driver/mysql"
    6. "gorm.io/gorm"
    7. "gorm.io/gorm/schema"
    8. "net/http"
    9. "strconv"
    10. "time"
    11. )
    12. func main() {
    13. // 创建服务
    14. ginServer := gin.Default()
    15. // 连接mysql
    16. // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
    17. dsn := "root:zsp123456@tcp(127.0.0.1:3306)/zsp?charset=utf8mb4&parseTime=True&loc=Local"
    18. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
    19. // 表明复数问题
    20. NamingStrategy: schema.NamingStrategy{SingularTable: true},
    21. })
    22. // 设置sql的一些属性
    23. sqlDB, err := db.DB()
    24. sqlDB.SetMaxIdleConns(10)
    25. sqlDB.SetMaxOpenConns(100)
    26. sqlDB.SetConnMaxLifetime(10 * time.Second) // 10s
    27. //结构体,就是创建表用的,包含了name,state,phone
    28. type List struct {
    29. // 主键id等信息
    30. gorm.Model
    31. Name string `gorm:"type:varchar(20);not null" json:"name" binding:"required"`
    32. State int `gorm:"type:int(10);not null" json:"state" binding:"required"`
    33. Phone string `gorm:"type:varchar(50);not null" json:"phone" binding:"required"`
    34. }
    35. // 数据库迁移
    36. db.AutoMigrate(&List{})
    37. // 以上就是准备工作,下面开始crud
    38. // CRUD
    39. // 增加
    40. ginServer.POST("/add", func(context *gin.Context) {
    41. var data List
    42. err := context.ShouldBindJSON(&data)
    43. // 判断绑定是否有错误
    44. if err != nil {
    45. context.JSON(http.StatusBadRequest, gin.H{"msg": "数据有误"})
    46. } else {
    47. // 数据库操作 增加一条数据
    48. db.Create(&data) // 创建一条数据
    49. context.JSON(http.StatusOK, gin.H{
    50. "msg": "添加成功",
    51. "data": data,
    52. "code": http.StatusOK,
    53. })
    54. }
    55. })
    56. // 删除
    57. ginServer.DELETE("/delete/:id", func(context *gin.Context) {
    58. var data []List
    59. // 接收id
    60. id := context.Param("id")
    61. // 判断id是否存在
    62. db.Where("id = ?", id).Find(&data)
    63. // id存在则删除,不存在报错
    64. if len(data) == 0 {
    65. context.JSON(http.StatusOK, gin.H{
    66. "msg": "删除失败",
    67. "code": http.StatusBadRequest,
    68. })
    69. } else {
    70. // 操作数据库删除
    71. db.Where("id = ?", id).Delete(&data)
    72. context.JSON(http.StatusOK, gin.H{
    73. "msg": "删除成功",
    74. "code": http.StatusOK,
    75. })
    76. }
    77. })
    78. //修改
    79. ginServer.PUT("/edit/:id", func(context *gin.Context) {
    80. var data List
    81. // 接收id
    82. id := context.Param("id")
    83. // 判断id是否存在
    84. db.Select("id").Where("id = ?", id).Find(&data)
    85. // 判断id是否存在
    86. if data.ID == 0 {
    87. context.JSON(http.StatusBadRequest, gin.H{
    88. "msg": "用户id没有找到",
    89. })
    90. } else {
    91. err := context.ShouldBindJSON(&data)
    92. if err != nil {
    93. context.JSON(http.StatusBadRequest, gin.H{
    94. "msg": "修改失败",
    95. })
    96. } else {
    97. //db修改数据库
    98. db.Where("id = ?", id).Updates(&data)
    99. context.JSON(http.StatusOK, gin.H{
    100. "msg": "修改成功",
    101. })
    102. }
    103. }
    104. })
    105. // 查询(条件查询,全部查询/分页查询)
    106. //条件查询
    107. ginServer.GET("/list/:name", func(context *gin.Context) {
    108. //获取路径参数
    109. name := context.Param("name")
    110. var data []List
    111. // 查询数据库是否存在
    112. db.Where("name = ?", name).Find(&data)
    113. // 判断是否查询到数据
    114. if len(data) == 0 {
    115. context.JSON(http.StatusBadRequest, gin.H{
    116. "msg": "没有查询到数据",
    117. })
    118. } else {
    119. context.JSON(http.StatusOK, gin.H{
    120. "msg": "查询成功",
    121. "data": data,
    122. })
    123. }
    124. })
    125. // 分页查询
    126. ginServer.GET("/list", func(context *gin.Context) {
    127. var pageList []List
    128. // 1.查询全部数据、查询分页数据
    129. pageSize, _ := strconv.Atoi(context.Query("pageSize"))
    130. pageNum, _ := strconv.Atoi(context.Query("pageNum"))
    131. // 判断是否需要分页
    132. if pageSize == 0 {
    133. pageSize = -1
    134. }
    135. if pageNum == 0 {
    136. pageNum = -1
    137. }
    138. offsetVal := (pageNum - 1) * pageSize
    139. if pageNum == -1 && pageSize == -1 {
    140. offsetVal = -1
    141. }
    142. // 返回一个总数
    143. var total int64
    144. // 查询数据库
    145. // limit 分页 -1:查询全部数据
    146. db.Model(pageList).Count(&total).Limit(pageSize).Offset(offsetVal).Find(&pageList)
    147. if len(pageList) == 0 {
    148. context.JSON(http.StatusBadRequest, gin.H{
    149. "msg": "暂无数据",
    150. })
    151. } else {
    152. context.JSON(http.StatusOK, gin.H{
    153. "msg": "查询成功",
    154. "data": gin.H{
    155. "list": pageList,
    156. "total": total,
    157. "pageNum": pageNum,
    158. "pageSize": pageSize,
    159. },
    160. "code": http.StatusOK,
    161. })
    162. }
    163. })
    164. //启动服务
    165. err = ginServer.Run(":8082")
    166. if err != nil {
    167. return
    168. }
    169. }

    构造体创建出来的表

  • 相关阅读:
    「软件设计」权威领域驱动设计(DDD)简介
    VM装MACos
    springboot项目部署 + vue项目部署
    Scala编程精粹:隐式转换与隐式参数的高级应用与实例解析
    3.6、媒体接入控制
    Prometheus 监控 Hyperledger Fabric 网络
    odoo15重建数据库(windows版本)
    【操作系统】错题库
    2023西南石油大学计算机考研信息汇总
    SSH在线考试系统
  • 原文地址:https://blog.csdn.net/m0_55627541/article/details/133807240