写在前面
今天继续学习,主要从具体的编程语句来讲解如何通过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里
对记录进行增删改操作
- 增加记录:
client.creat(NewUser),NewUser是所要插入的结构体 - 修改记录:
client.Model(User{}).Where("Id=?",5858).Update("city","郑州"),Model里的User{}是所要修改的哪张表,Where是所要修改的哪条记录,Update是所要修改的字段名和字段值 - 删除记录:
client.Model(User{}).Where("Id=?",5858).Delete(User{}),与修改记录的操作类似,但是注意Delete里面要传进去结构体