一、连接到数据库
(1) MySQL
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
} //想要正确的处理 time.Time ,需要带上 parseTime=true 参数
(2) 自定义驱动(自己导入对应的数据库驱动器)
import (
_ "example.com/my_mysql_driver"
"gorm.io/gorm"
)
db, err := gorm.Open(mysql.New(mysql.Config{
DriverName: "my_mysql_driver",
DSN: "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local",
}), &gorm.Config{})
二、CRUD接口
(1) 创建
1、通过创建Gorm.Model
模块(结构体),映射对应变量
//默认列名为变量名
type User struct{
gorm.Model
Name string `gorm:"varchar(10);not null"`
Age int `gorm:"int"`
}//gorm在数据库创建数据表时,使用蛇形小写命名,如UserName->user_name
// 自定义列名
type User struct {
gorm.Model
Name string `gorm:"column:username"`
Age int `gorm:"column:age"`
}
-
自动创建表及保存数据
//1.1 自动在数据库下创建表名为users数据表 db.AutoMigrate(&User{}) //1.2 自定义表名 db.Table("user_information").CreateTable(&User{}) //2. 保存数据 NewUser := User{ Name: "Tony", Age: 18, } db.Save(&NewUser)
(2)查询
// 1.1 查询"name"为"Tony"的用户,并用result捕获整个结构体
result := User{}
// 得到第一个满足条件的数据
db.Where("name = ?", "Tony").First(&result)
// 得到所有满足条件的数据
db.Where("name <> ?", "Tony").Find(&users)
// 用IN查询
db.Where("name IN ?", []string{"name1", "name2"}).Find(&results)
// 用LIKE查询
db.Where("name LIKE ?", "%To%").Find(&results)
// 用AND查询
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&results)
// 使用结构体查询
db.Where(&User{Name: "jinzhu", Age: 0}).Find(&reults)
(3)修改
db.Where("name = ?", NewUser.Name).First(&NewUser)
NewUser.Name = "Tom"
db.Save(&NewUser)
// 将NewUser的Name修改成"Tom"
(4)删除
db.Delete(&NewUser) // 为软删除,将字段中"deleted_at"设为当前时间,在数据库中仍存在该调数据