目录golang-gORM自动建表定义结构体定义变化的表名实现interface执行sql判断是否有无GoRM概述概述快速入门总结golang-gorm自动建表 定义结构体 设置主键
设置主键、自增、和独立索引
联合索引用addindex
type User struct {
//通过在字段后面的标签说明,定义golang字段和表字段的关系
//例如 `gorm:"column:username"` 标签说明含义是: Mysql表的列名(字段名)为username
//这里golang定义的Username变量和mysql表字段username一样,他们的名字可以不一样。
Id int64 `gorm:"column:username;not null;type:int(4) primary key auto_increment;comment:'用户名'"`
PassWord string `gorm:"column:password;type:varchar(30);index:idx_name"`
//创建时间,时间戳
CreateTime int64 `gorm:"column:createtime"`
}
全局变量
var TablePre = "2021"
func (u *User) TableName() string{
return "userss"+table
}
dbSlaveClient, err := gorm.GetClient(xxxx)
if err != nil {
fmt.Println(err)
}
TablePre = "20210"
err = dbSlaveClient.Model(&User{}).Debug().
AutoMigrate(&User{}).
AddIndex("idx_cr_pass","createtime","password").Error
if !dbSlaveClient.HasTable(&User{}) {
dbSlaveClient.AutoMigrate(&User{})
if dbSlaveClient.HasTable(&User{}) {
fmt.Println("balance表创建成功")
} else {
fmt.Println("balance表创建失败")
}
} else {
fmt.Println("表已存在")
}
官网文档另人看的头疼,还是记录一些常用的api吧,基本都是复制官方文档做些例子。
GORM给我最直观的感受:程序员只需关系结构体,操作结构体,无需关注如何操作数据库。
GORM保护数据的安全,比如说结构体删除了某个字段,原来在数据库中的表不会删那个字段。结构体指定改了表名,原来生成的表不会被删除。其将有数据安全风险的可能全部规避掉,交由开发人员手动去筛查。
db.AutoMigrate(&UserInfo{})
:意思是自动迁移,自动迁移为给定模型运行自动迁移,只会添加缺少的字段,不会删除/更改当前数据。就是说如果结构体加了新的字段,会给表也加上新字段。db.Create()
传递一个结构体,自动找到结构体对应的表,并将结构体的值作为一条记录插入表中,可以传指针或者非指针,都可以。db.First()
传递一个结构体的指针,自动找到结构体对应的表,并将表中第一条记录赋值给结构体,必须因为指针。db.Find(out,where...)
按照条件查询,传递一个结构体的指针,自动找到结构体对应的表,并按照where中的条件查询记录,赋值给结构体。还有很多查询的语法,后续再说。db.Model().Update()
传递一个查询出来有值结构体,通过Updata将其对应的字段更新,并传递到表中。db.Delete(&u)
删除传递进来的数据库对应的记录。package main
import (
"fmt"
"GitHub.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
// UserInfo 用户信息
type UserInfo struct {
ID uint
Name string
Gender string
Hobby string
}
func main() {
db, err := gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
// 自动迁移
db.AutoMigrate(&UserInfo{})
u1 := UserInfo{1, "武旭飞", "男", "篮球"}
u2 := UserInfo{2, "旭飞", "女", "足球"}
// 创建记录
db.Create(&u1)
db.Create(&u2)
// 查询第一条记录
var u = new(UserInfo)
db.First(&u)
fmt.Printf("%#v\n", u)
// 按条件查询
var uu UserInfo
db.Find(&uu, "hobby=?", "足球")
fmt.Printf("%#v\n", uu)
// 更新
db.Model(&u).Update("hobby", "双色球")
// 删除
db.Delete(&u)
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: golang-gorm自动建表问题
本文链接: https://lsjlt.com/news/196454.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0