Gorm连接Mysql数据库及其语法
文章目录
- Gorm连接Mysql数据库及其语法
- 前期工作
- 找到Gorm的github项目
- 简单了解相关MySQL语法
- 启动数据库
- 定义数据库模型注意点
- Gorm Model定义
- 结构体标签(tag)
- 支持的结构体标记(Struct tags)
- 关联相关标记(tags)
- 主键(Primary Key)
- 表名(Table Name)
- 列名(Column Name)
- 时间戳跟踪
- CreatedAt
- UpdatedAt
- DeletedAt
- 语法
前期工作
找到Gorm的github项目
- 项目地址:
github.com/jinzhu/gorm
[http://github.com/jinzhu/gorm] - 拉取项目:
go get -u github.com/jinzhu/gorm
简单了解相关MySQL语法
启动数据库
- 前提: 想要连接数据库必须手动开启数据,以及手动创建数据库
- 连接数据库:
- 语法:
db,err := gorm.Open(....)
- 例子:
db, err := gorm.Open("mysql", "root:password@(127.0.0.1:3306)/数据库?charset=utf8mb4")
- 解析:
"mysql"
:表示你要连接数据库的类型"root"
: 登陆数据库的用户名(默认root)"password"
: 自己的密码数据库
:表示要操作的数据库"@(127.0.0.1:3306)"
: 表示需要连接的数据库本地地址,假如不记得端口是哪个可以在登录mysql后使用show global variables like 'port';
查看端口"?charset=utf8mb4"
:表示解析成的字节码
- 语法:
定义数据库模型注意点
-
1.结构体的名称必须首字母大写,并且和数据库表名对应
-
2.结构体中的字段名称首字母必须大写
-
3.默认情况表名是结构体名称的复数形式
-
4.可以使用结构体中自定义方法
TableName
改变结构体的默认表名称-
//默认来说User结构体应该操作users表的 //利用下述方法就可任意操作数据库中的表格 func (User)TableName()string{ return "user" }
-
Gorm Model定义
-
作用: 模型结构体嵌入了 gorm.Model,那么就自动拥有上述这些字段和方法,可以避免重复编写,提高开发效率。
-
默认字段:
type Model struct { ID uint `gorm:"primary_key"` //Id,一般默认id为主键(理解为表的第一个数据) CreatedAt time.Time //创建 时间戳 UpdatedAt time.Time //更新 时间戳 DeletedAt *time.Time `sql:"index"` //删除 时间戳 }
gorm:"primary_key"
这里的被称为tag标签
结构体标签(tag)
支持的结构体标记(Struct tags)
关联相关标记(tags)
主键(Primary Key)
GORM 默认会使用名为ID的字段作为表的主键。
type User struct {
ID string // 名为`ID`的字段会默认作为表的主键
Name string
}
// 使用`AnimalID`作为主键
type Animal struct {
AnimalID int64 `gorm:"primary_key"`
Name string
Age int64
}
表名(Table Name)
表名默认就是结构体名称的复数,例如:
type User struct {} // 默认表名是 `users`
// 将 User 的表名设置为 `profiles`
func (User) TableName() string {
return "profiles"
}
func (u User) TableName() string {
if u.Role == "admin" {
return "admin_users"
} else {
return "users"
}
}
// 禁用默认表名的复数形式,如果置为 true,则 `User` 的默认表名是 `user`
db.SingularTable(true)
也可以通过Table()
指定表名:
// 使用User结构体创建名为`deleted_users`的表
db.Table("deleted_users").CreateTable(&User{})
var deleted_users []User
db.Table("deleted_users").Find(&deleted_users)
SELECT * FROM deleted_users;
db.Table("deleted_users").Where("name = ?", "jinzhu").Delete()
DELETE FROM deleted_users WHERE name = 'jinzhu';
GORM还支持更改默认表名称规则:
gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string {
return "prefix_" + defaultTableName;
}
列名(Column Name)
列名由字段名称进行下划线分割来生成
type User struct {
ID uint // column name is `id`
Name string // column name is `name`
Birthday time.Time // column name is `birthday`
CreatedAt time.Time // column name is `created_at`
}
可以使用结构体tag指定列名:
type Animal struct {
AnimalId int64 `gorm:"column:beast_id"` // set column name to `beast_id`
Birthday time.Time `gorm:"column:day_of_the_beast"` // set column name to `day_of_the_beast`
Age int64 `gorm:"column:age_of_the_beast"` // set column name to `age_of_the_beast`
}
时间戳跟踪
CreatedAt
如果模型有 CreatedAt
字段,该字段的值将会是初次创建记录的时间。
db.Create(&user) // `CreatedAt`将会是当前时间
// 可以使用`Update`方法来改变`CreateAt`的值
db.Model(&user).Update("CreatedAt", time.Now())
UpdatedAt
如果模型有UpdatedAt
字段,该字段的值将会是每次更新记录的时间。
db.Save(&user) // `UpdatedAt`将会是当前时间
db.Model(&user).Update("name", "jinzhu") // `UpdatedAt`将会是当前时间
DeletedAt
如果模型有DeletedAt
字段,调用Delete
删除该记录时,将会设置DeletedAt
字段为当前时间,而不是直接将记录从数据库中删除。
语法
-
相关语法可查询官方网站
-
https://gorm.io/zh_CN/docs/create.html
jinzhu") //UpdatedAt
将会是当前时间
#### DeletedAt
如果模型有`DeletedAt`字段,调用`Delete`删除该记录时,将会设置`DeletedAt`字段为当前时间,而不是直接将记录从数据库中删除。
---
## 语法
- 相关语法可查询官方网站
- https://gorm.io/zh_CN/docs/create.html