安装使用
安装
go get -u gorm.io/gorm go get -u gorm.io/driver/mysql
使用
// 引入这两个包 import ( "gorm.io/driver/mysql" "gorm.io/gorm" )
连接数据库
Dan: [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN]
用户名:密码@协议(ip:端口)/数据库名字?其他配置参数
charset: 设置字符集
parseTime: 格式化时间
方式一:
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
方式二:
db, err := gorm.Open(mysql.New(mysql.Config{ DSN: "root:root@tcp(127.0.0.1:8889)/test?utf8mb4=utf8&parseTime=True&loc=Local", // DSN data source name DefaultStringSize: 256, // string 类型字段的默认长度,如果设置的字符集是utf8mb4的,这里需要该为171 DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置 }), &gorm.Config{ SkipDefaultTransaction: false, // 跳过默认事物 NamingStrategy: schema.NamingStrategy{ TablePrefix: "t_", // 表名前缀,`User` 的表名应该是 `t_users` SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `t_user` }, DisableForeignKeyConstraintWhenMigrating: true, // 创建表的时候是否创建外健约束 }) println(db, err)
迁移
自动迁移
// 先创建一个结构体 type User struct { Name string } // 执行自动迁移命令 db.AutoMigrate(&User{}) // 根据上边的配置,这里会自动创建一个t_users表名的表
Migrator 接口
获取当前连接的数据库
fmt.Println(db.Migrator().CurrentDatabase()) //这里返回当前连接的库名
创建表
// 先创建一个结构体 type User struct { Name string } db.Migrator().CreateTable(&User{}) // 注意: 如果数据表存在则会提示Error 1050: Table 't_user' already exists
判断表是否存在
fmt.Println(db.Migrator().HasTable(&User{})) // 返回一个bool值,存在返回true 不存在返回false
删除表
fmt.Println(db.Migrator().DropTable(&Users{})) // 删除表
重命名表
type User struct { Name string } type Users struct { Name string age uint // 这里的字段并没有被迁移进去,仅仅是修改了表名 } fmt.Println(db.Migrator().RenameTable(&User{}, &Users{}))
给表中添加一个字段
type User struct { Name string Age int } err := db.Migrator().AddColumn(&User{}, "Age")
删除一个表中的字段
db.Migrator().DropColumn(&User{}, "Age")
修改表中字段的名称
db.Migrator().AlterColumn(&User{}, "Name")
检查表中的字段名是否存在
db.Migrator().HasColumn(&User{}, "Name")
重命名表中的字段
_ = db.Migrator().RenameColumn(&User{}, "Name", "NewName")