通过Gorm连接使用MySQL数据库 | 青训营

99 阅读3分钟
写在前面

今天继续学习,主要从具体的编程语句来讲解如何通过Gorm来连接mysql数据库,并实现增删改查操作。如果发现文章中有错误或漏洞,请多多指教。

关于Gorm的一些基础知识

简单来说,Gorm是运用在Go语言上的ORM。那么什么是ORM呢?它的英文是:Object Relation Mapping,其中的object是指编程语言中面向对象的概念,relation是指数据库中的关系表,而mapping则指的是两者的对应关系。更明确的说,当我们想要增删数据库中的记录时,我们可以在程序里直接操作对象来达到我们的目的。值得注意的是,在golang中我们需要一些驱动包来对数据库进行操作,而gorm已经简单包装了各种驱动,我们直接方便使用。

把结构体映射到表结构

在gorm默认的情况下,一个结构体名称蛇形复数就等于表名(比如一个名为UserLogin的结构体,gorm默认为它的表名为user_logins)。
对于结构体里的成员变量,gorm默认Id是主键(可以通过gorm:"primary_key"来自定义主键),成员变量名的蛇形是表里面的字段名称(可以通过gorm:"colunm:字段名"来自定义字段名称)

连接Mysql数据库
func main(){
    dataSourceName := "my_sql:123456@tcp(172.31.224.1:3306)/test?chrset=utf8&parseTime=True"
    client,err := gorm.Open(mysql.Open(dataSourceName),nil)
    if err != nil {
        return err
    }
}

以上面为例: 先用dataSourceName创建字符串,其中my_sql:123456是连接数据库的账号和密码tcp是所采用的网络连接协议172.31.224.1:3306是所连接服务器的IP和端口号,后面一些参数集;后用client来承接mysql的客户端,err反应错误信息

读取查询mysql数据库
type User struct {
     Id int
     Keyword string 
     City string
}
//自定义User结构体

func (User) TableName() string {
    return "user"
}
//自定义User相应的字段名为user

func read(client *gorm.DB,city string) *User {
    var users []user
    err := client.Where("city=?",city).Find(&users).error
    if len(users) > 0 || err != nil {
        return err
    }
    return &users[0]
}
//查找字段名city为city的记录

func main(){
    dataSourceName := "my_sql:123456@tcp(172.31.224.1:3306)/test?chrset=utf8&parseTime=True"
    client,err := gorm.Open(mysql.Open(dataSourceName),nil)
    if err != nil {
        return err
    }

     user := read (client,"北京")
     if user != nil {
         fmt.Println("%+v\n",*user)
     } else {
         fmt.Println("无结果")
     }
}

有以下几点需要注意:

  • go语言提倡错误就地处理,要时时提防错误的出现
  • client.Where("city=?",city).Find(&users)语句中,where里的第一个city指的是查询的字段名,第二个city指的是查询的字段值,把所查询到的记录放在users
对记录进行增删改操作
  1. 增加记录:client.creat(NewUser)NewUser是所要插入的结构体
  2. 修改记录:client.Model(User{}).Where("Id=?",5858).Update("city","郑州")Model里的User{}是所要修改的哪张表Where是所要修改的哪条记录Update是所要修改的字段名和字段值
  3. 删除记录:client.Model(User{}).Where("Id=?",5858).Delete(User{}),与修改记录的操作类似,但是注意Delete里面要传进去结构体