返回顶部
首页 > 资讯 > 后端开发 > GO >golang-gorm自动建表问题
  • 681
分享到

golang-gorm自动建表问题

golang-gorm自动建表golang-gorm建表golang-gorm 2023-02-16 18:02:52 681人浏览 薄情痞子
摘要

目录golang-gORM自动建表定义结构体定义变化的表名实现interface执行sql判断是否有无GoRM概述概述快速入门总结golang-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"

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

概述

在这里插入图片描述

  • 数据表 <===> 结构体
  • 数据行 <===> 结构体实例
  • 字段  <===> 结构体字段

快速入门

  • 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

猜你喜欢
  • golang-gorm自动建表问题
    目录golang-gorm自动建表定义结构体定义变化的表名实现interface执行sql判断是否有无GORM概述概述快速入门总结golang-gorm自动建表 定义结构体 设置主键...
    99+
    2023-02-16
    golang-gorm自动建表 golang-gorm建表 golang-gorm
  • AndroidComposeColumn列表不自动刷新问题
    目录1. 背景2. 解决方案3. 原因4. 结论4.1 解决方案一4.2 解决方案二5.自己实现一个mutableStateOf()1. 背景 我们都知道,Compose可以使用mu...
    99+
    2023-01-30
    Android Compose Column Android Compose Column列表刷新
  • springboot中关于自动建表,无法更新字段的问题
    目录关于自动建表,无法更新字段问题Springboot中的配置除了create配置,还有以下几种springboot jpa未自动建表问题记录检查pom是否正确引入对应模块检查app...
    99+
    2024-04-02
  • C语言如何建立动态链表问题
    目录C语言建立动态链表静态链表和动态链表的区别静态链表和动态链表的区别一、静态链表二、动态链表总结C语言建立动态链表 所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即...
    99+
    2022-12-23
    C语言动态链表 建立动态链表 C语言建立动态链表
  • 解决Spring Data Jpa 实体类自动创建数据库表失败问题
    目录Spring Data Jpa 实体类自动创建数据库表失败找了半天发现是一个配置的问题可能导致JPA 无法自动建表的问题汇总1、没加@Entity或引错Entity所在包2、jp...
    99+
    2024-04-02
  • GoLang自定义包导入问题
    php小编新一在这里为大家介绍一下GoLang中的一个常见问题:自定义包导入问题。在Go语言开发中,我们经常需要使用自定义的包来实现一些特定的功能。然而,在导入自定义包时,有时候会出现...
    99+
    2024-02-12
    go语言 标准库
  • java创建表格序号自增问题怎么解决
    在Java中,可以通过使用一个变量来记录表格的序号,并在每次创建新的表格时增加该变量的值来实现表格序号的自增。以下是一个示例代码,演...
    99+
    2023-10-18
    java
  • springboot自动建表怎么实现
    在Spring Boot中,可以通过以下几种方式实现自动建表:1. 使用JPA(Java Persistence API):JPA是...
    99+
    2023-09-27
    springboot
  • camunda自动建表失败解决
    解决方法:加上nullDatabaseMeansCurrent=true spring: datasource: url: jdbc:mysql://localhost:3306/camundanullDatabaseMeansCu...
    99+
    2023-10-02
    java mysql 数据库
  • Android Compose Column列表不自动刷新问题如何解决
    本篇内容介绍了“Android Compose Column列表不自动刷新问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2023-07-05
  • Android 10自动连接WiFi问题
    说明:本文主要说明扫码之后自动连接WiFi的一些处理,扫码的流程相对简单,网上教程也比较多,对于目前Android各个版本也没有太多变化。 问题描述:最近在做项目的时候,发现以前的项目有扫描二维码自动连接WiFi的功能,设备改了生...
    99+
    2022-06-06
    自动 Android
  • @DynamicUpdate //自动更新updatetime的问题
    @DynamicUpdate //自动更新updatetime 在数据库中的字节,包括updatetime,但是我更新某一个内容时,updatetime,没有自动更新,这时候我们只需...
    99+
    2024-04-02
  • dedecms自定义表单用js代替联动类型解决联动问题
    最近用DEDEcms完成一个自定义表单,要用到地区的三级级联,地区肯定要使用option下拉框,如果让人一个个填肯定不行,DEDECMS内置的联动类型被注释掉了,网上有解决联动类型的例子,但存在后台信息的是枚举,都是数字...
    99+
    2022-06-12
    dedecms 自定义表单 联动类型
  • 自动扩张WPF树型表格列宽问题怎么解决
    今天小编给大家分享一下自动扩张WPF树型表格列宽问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。原问题如下:图1 ...
    99+
    2023-06-17
  • 动易新建频道的问题
    关键字描述:问题 频道 新建 输入 选择 地址 没有 内部 &ldquo 链接 我用的是动易cms专业版,新建频道时发现外部链接地址处没有钩选时却可以输入地址,而下面的二级域名输入那里却禁止输入,选择动易系统内部频道后...
    99+
    2022-06-12
    问题 频道 新建 输入 选择 地址 链接 没有 内部
  • Golang中逆转链表问题怎么解决
    今天小编给大家分享一下Golang中逆转链表问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Golang是一种基于...
    99+
    2023-07-05
  • 设置DNS后自动重置问题
    Linux 系统通常通过修改/etc/resolv.conf 来设置DNS,原始内容如下: 添加新的dns,例如: reboot重启之后,/etc/resolv.conf会被重置。 解决方法: 修...
    99+
    2023-09-13
    linux 服务器
  • vue中echarts自动轮播tooltip问题
    目录echarts自动轮播tooltipEcharts大屏饼图(可自动轮播)echarts自动轮播tooltip vue首先需要封装tools.js的包(函数): export fu...
    99+
    2022-11-13
    vue中echarts echarts自动轮播 vue tooltip
  • springboot 无法自动装配的问题
    目录springboot 无法自动装配@Autowired 报错:无法自动装配基本上是因为放到org.example下,问题解决原因无法自动装配。未找到“xxxMappe...
    99+
    2024-04-02
  • Oracle TNSListener服务启动后自动停止问题
    今天忽然发现 TNSListener 服务无法启动,在服务控制台将其启动后,刷新一下,又自动回到停止状态,也没有报任何的错误。而且SPL PLus还可以正常的使用。从百度里搜到一篇类似的问题,原来是我改过机...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作