开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
今天接着学习Go的Gorm框架来操作数据库,今天来介绍字段含义以及如何连接数据库,这一个非常对开发人员非常友好的ORM库,和我一起来学习下吧!
字段概述
gorm.Model
在上一篇文章中提到的结构体定义中,有出现一个gorm.Model这个字段,点开源码的定义如下:
//gorm.Model的结构定义
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
例如定义一个User,gorm.Model字段就可以将ID, CreatedAt, UpdatedAt, DeletedAt 注入到 User 模型中
type User struct {
gorm.Model
Name string
age int
}
也可以使用ID作为主键名称,GORM默认这么使用,也可以使用标签gorm:"primary_key"来设置主键
type User struct {
ID int
//或者
UserId int64 `gorm:"primary_key"`
Name string
age int
}
表名设置
如果定义一个结构体,那么对应的表名就是结构体名称的复数形式,例如:
type User struct{} // 表名为: users
可以通过修改TableName方法,来设置 User 的表名为 YYQQ
func (User) TableName() string {
return "YYQQ"
}
可以通过设置SingularTable()传入true,可以禁用将表名设置为复数
db.SingularTable(true)
也可以通过db.Table指定创建表名
db.Table("YYQQ").CreateTable(&User{})
var YYQQ []User
// SELECT * FROM YYQQ;
db.Table("YYQQ").Find(&YYQQ)
//DELETE FROM YYQQ WHERE name = 'xiaoming';
db.Table("YYQQ").Where("name = ?", "xiaoming").Delete()
时间戳
CreatedAt字段类型的模型,将首次创建记为当前时间
db.Create(&user) // 将设置 `CreatedAt` 为当前时间
//可以使用`Update` 方法来更改默认时间
db.Model(&user).Update("CreatedAt", time.Now())
UpdatedAt字段类型的模型,将数据更新记为当前时间
db.Save(&user) // 保存 将设置 `UpdatedAt` 为当前时间
db.Model(&user).Update("name", "xiaoming") // 更新 将设置 `UpdatedAt` 为当前时间
连接数据库
第一步连接数据库之前,需要导入数据库驱动程序,使用 _可以初始化导入的包
import _ "github.com/go-sql-driver/mysql"
连接MySQL,想要正确的处理 time.Time ,需要带上 parseTime 参数
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
func main() {
db, err := gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local")
defer db.Close()
}
连接PostgreSQL
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)
func main() {
db, err := gorm.Open("postgres", "host=myhost port=myport user=gorm dbname=gorm password=mypassword")
defer db.Close()
}
连接Sqlite3
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
func main() {
db, err := gorm.Open("sqlite3", "test.db")
defer db.Close()
}
连接SQL Server
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
)
func main() {
db, err := gorm.Open("mssql", "sqlserver://username:password@localhost:1433?database=dbname")
defer db.Close()
}
总结
今天浅谈了Go与Gorm(二),主要介绍了相关字段和数据库的连接,接下来会继续深入了解GORM的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!