文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

golang-gorm自动建表问题

2023-02-16 18:00

关注

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"

实现interface

func (u *User) TableName() string{
    return "userss"+table
}

执行sql

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("表已存在")
  }

GORM概述

官网文档另人看的头疼,还是记录一些常用的api吧,基本都是复制官方文档做些例子。

GORM给我最直观的感受:程序员只需关系结构体,操作结构体,无需关注如何操作数据库。

GORM保护数据的安全,比如说结构体删除了某个字段,原来在数据库中的表不会删那个字段。结构体指定改了表名,原来生成的表不会被删除。其将有数据安全风险的可能全部规避掉,交由开发人员手动去筛查。

概述

在这里插入图片描述

快速入门

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)
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯