golang-gorm自动建表问题

目录
  • 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"

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

总结

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

(0)

相关推荐

  • golang gorm 结构体的表字段缺省值设置方式

    我就废话不多说了,大家还是直接看代码吧~ type Animal struct { ID int64 Name string `gorm:"default:'galeone'"` Age int64 } 把 name 设置上缺省值 galeone 了. 补充:Golang 巧用构造函数设置结构体的默认值 看代码吧~ package main import "fmt" type s1 struct { ID string s2 s2 s3 s3 } type s2 s

  • golang Gorm框架讲解

    目录 1.gorm介绍 1.1介绍 1.2安装 2.使用 2.1创建表 2.2.添加数据 2.3.查询数据 2.4更新数据 2.5删除数据 2.6执行原生sql 3.一对一 3.1创建表 3.2多态关联 3.3外键约束 4.一对多 5.多对多 6.获取多表数据 1.gorm介绍 1.1介绍 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Pr

  • 详解如何利用GORM实现MySQL事务

    目录 前言 禁用默认事务 自动事务 手动事务 嵌套事务 SavePoint.RollbackTo 小结 前言 为了确保数据一致性,在项目中会经常用到事务处理,回滚操作还是比较常见的需求:事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部都执行,要么全不执行,对于MySQL事务相信大家应该都不陌生,这篇文章主要总结一下在Go语言中Gorm是如何实现事务的:感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助. 禁用默认事务 gorm事务默认是开启的.为了确保数据一致性,Gorm会在事务

  • mybatis自动建表的实现方法

    1.添加ACTable依赖 <!--mybatis-plus自动建表--> <dependency> <groupId>com.gitee.sunchenbin.mybatis.actable</groupId> <artifactId>mybatis-enhance-actable</artifactId> <version>1.1.1.RELEASE</version> </dependency>

  • springboot中关于自动建表,无法更新字段的问题

    目录 关于自动建表,无法更新字段问题 Springboot中的配置 除了create配置,还有以下几种 springbootjpa未自动建表问题记录 检查pom是否正确引入对应模块 检查application文件配置是否存在错误 关于自动建表,无法更新字段问题 Springboot中的配置 jpa:     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect     database: MYSQL     show-sql:

  • Springboot引入hibernate配置自动建表并进行增删改查操作

    目录 前言 一.引入依赖 二.配置yml 三.写代码 四.测试结果 前言 有些业务比较复杂,比如我们需要新建10张表,每张表有10个字段,如果用手工来操作,肯定非常浪费时间,而且随着代码中对实体类的修改,还要同时修改数据库表,有时候写着写着就忘了,代码改了,数据库没改,这种问题使用 hibernate 的自动建表就好啦. 一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac

  • 详解hibernate自动创建表的配置

    详解hibernate自动创建表的配置 配置自动创建表: <prop key="hibernate.hbm2ddl.auto">update</prop>//首次创建项目时用,项目稳定后一般注释这里有4个值: update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后

  • SpringBoot+jpa配置如何根据实体类自动创建表

    目录 jpa配置根据实体类自动创建表 1.配置文件application.properties 2.pom.xml引入包 3.编写实体类 4.运行项目 5.针对项目启动以后数据库并未生成数据库表问题 jpa根据Entry自动生成表 1.加入依赖 2.配置 application.yml 3. 创建Entity jpa配置根据实体类自动创建表 1.配置文件application.properties spring.datasource.url=jdbc:mysql://localhost:3306

  • jpa多数据源时Hibernate配置自动生成表不生效的解决

    目录 application.yml如下 下面是DataSource的配置 下面是第一个数据源的配置 下面是第二个数据源的配置 jpa配置多数据源教程很多,在Springboot2之后有一些变化,来看一下. application.yml如下 spring: application: name: t3cc datasource: primary: jdbc-url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${DB_NAME

  • Laravel自动生成UUID,从建表到使用详解

    gitHub地址: https://github.com/EmadAdly/laravel-uuid.git 1.安装依赖 composer require emadadly/laravel-uuid 2.然后在config/app.php的providers里添加ServiceProvider 'providers' => [ ... Emadadly\LaravelUuid\LaravelUuidServiceProvider::class, ], 3.然后根目录执行 php artisan

  • golang gorm 操作mysql及gorm基本用法

    golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm的使用做下简单介绍 下载gorm: go get -u github.com/jinzhu/gorm 在项目中引入gorm: import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) 定义db连接信息 func DbConn(MyUser, Password, Host, Db stri

  • golang Gorm与数据库完整性约束详解

    数据库约束要点: 主键约束(非空且唯一)外键约束 子表外键字段的值必须在主表被参照字段值得范围内,或者为NULL:外键参照的必须是主表的主键或唯一键:主表主键/唯一键被子表参照时,主表相应记录不允许被删除 在golang中,采用orm对数据库进行建模是比较方便的.grom是其中一个比较流行的orm工具. 本篇基于golang.grom1.91.和PostgreSQL来进行说明. 注:本文的例子是极端情况,一般情况只是单字段主键. 1.实体完整性: 每个关系(表)有且仅有一个主键,每一个主键值必须

  • golang gorm框架数据库的连接操作示例

    目录 1. 连接数据库 1.1 MySQL 1.2 PostgreSQL 1.3 Sqlite3 1.4 不支持的数据库 2. 迁移 2.1. 自动迁移 2.2. 检查表是否存在 2.3. 创建表 2.4. 删除表 2.5. 修改列 2.6. 删除列 2.7. 添加外键 2.8. 索引 1. 连接数据库 要连接到数据库首先要导入驱动程序.例如 import _ "github.com/go-sql-driver/mysql" 为了方便记住导入路径,GORM包装了一些驱动. import

随机推荐