Gorm当前支持MySql, PostgreSql, Sqlite等主流数据库
1.安装
首先安装数据库驱动go get github.com/go-sql-driver/mysql 然后安装gorm包go get github.com/jinzhu/gorm
2.使用小示例
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql" // 包装
)
type User struct {
Id int64
UserId int64
AddId int64
Name string
Address string
}
type Address struct {
Id int64
UserId int64
AddId int64
AddName string
AddLocation string
}
func main() {
db, err := gorm.Open("mysql", "root:123456@/guolianlc?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Println("connect db error: ", err)
}
defer db.Close()
if db.HasTable(&User{}) {
db.AutoMigrate(&User{})
} else {
db.CreateTable(&User{})
}
//db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&Address{})
db.AutoMigrate(&Address{})
db.Model(&User{}).AddForeignKey("add_id", "addresses(id)", "RESTRICT", "RESTRICT")
db.Model(&User{}).AddForeignKey("add_id", "addresses(id)", "RESTRICT", "RESTRICT")
db.Model(&User{}).AddIndex("idx_user_add_id", "add_id")
db.Model(&User{}).AddUniqueIndex("idx_user_id", "user_id")
}
复制代码
3.表级别操作
AutoMigrate() db.AutoMigrate(&Address{}) AutoMigrate()运行后,会自动migrate对应的model.仅仅新增新增的字段,不会进行修改已有的字段类型,删除字段的操作
HasTable() 检查表是否存在
CreateTable() db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&Address{}) 创建表 默认情况下,表名为结构体名的复数形式,当然也可以禁用; db.SingularTable(true)
DropTable()/ DropTableIfExists() 删除表
ModifyColumn() 修改列
DropColumn() 删除列
AddForeignKey() 参数 : 1th:外键字段,2th:外键表(字段),3th:ONDELETE,4th:ONUPDATE db.Model(&User{}).AddForeignKey("add_id", "addresses(id)", "RESTRICT", "RESTRICT") 两个表中的字段都必须存在,就像Users表中的add_id字段,如果不存在,无法自动新增字段,并自动创建外键
AddIndex() / AddUniqueIndex 添加索引,添加唯一值索引
db.Model(&User{}).AddForeignKey("add_id", "addresses(id)", "RESTRICT", "RESTRICT")
db.Model(&User{}).AddIndex("idx_user_add_id", "add_id")
db.Model(&User{}).AddUniqueIndex("idx_user_id", "user_id")
复制代码
RemoveIndex() 删除索引
示例中最终创建出的表结构:
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`address` varchar(