db2gorm -- 将mysql数据表转为gorm struct

Posted ball球

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db2gorm -- 将mysql数据表转为gorm struct相关的知识,希望对你有一定的参考价值。

0. 为什么写这样一个工具

  • 找到的开源工具功能比较多,用起来也复杂些
  • 自己定制的更适合自己的项目
  • 方便集成到gin
  • 学习go时间不长,写一款工具也是练习的过程

项目地址
https://github.com/qmhball/db2gorm

1. 功能

根据数据库表生成gorm需要的struct。支持指定单表生成,也可以全库生成。

比如有如下数据表:

Table: User
Create Table: CREATE TABLE `User` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `age` int(11) NOT NULL DEFAULT '-1',
  `is_admin` tinyint(1) NOT NULL DEFAULT '0',
  `is_valid` tinyint(1) NOT NULL DEFAULT '1',
  `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8 COMMENT='用户表'

db2gorm可以在指定的目录下生成 user/user.go,内容如下:

package user

type User struct
    ID uint32 
    Name string 
    Age int `gorm:"default:-1"`
    IsAdmin bool `gorm:"default:0"`
    IsValid bool `gorm:"default:1"`
    LoginTime time.Time `gorm:"default:CURRENT_TIMESTAMP"`

2. 使用

2.1 指定单表生成文件

package main

import (
    "git.sogou-inc.com/bpd-dhlib/db2gorm/gen"
)

dsn := "root:user237@tcp(10.10.10.10:3306)/mydb?charset=utf8&parseTime=true&loc=Local"
        
//生成指定单表
tblName := "User"
gen.GenerateOne(gen.GenConf
    Dsn:       dsn,
    WritePath: "./model",
    Stdout:    false,
    Overwrite: true,
, tblName)

gen.GenConf的说明如下:

  • Dsn:数据库配置
  • WritePath:指定文件写入的目录。生成前目录一定要存在。上例中会在model目录下生成user/user.go
  • Stdout:是否输出至标准输出。如果Stdout为true,则生成的struct不会写入文件。
  • Overwrite:当原文件存在时,是否进行覆盖。true为覆盖。

2.2 全库生成

    gen.GenerateAll(gen.GenConf
        Dsn:       dsn,
        WritePath: "./model",
        Stdout: false,
        Overwrite: true,
    )

3. 推荐的数据库配置

建议使用gorm v1.2以上版本(v1.1*的版本和v1.2差别比较大)

建议gorm.Open时指定SingularTable为true,即使用单数表名。这样就不必在struct上定义TableName方法指定表名了。

        gorm.Open(mysql.New(mysql.Config
			DSN:dsn,
		), &gorm.Config
			NamingStrategy:schema.NamingStrategy
			    //单数表名
				SingularTable: true,
			,
		)

4. 生成规则

4.1 表名

表名对应的大驼峰命名做为struct名,全小写表名做为目录名,文件名和包名。
比如表名为demo_test, 则:

  • struct名:DemoTest
  • 目录名:demotest
  • 文件名:demotest.go
  • 包名:demotest

4.2 字段名

表名对应的大驼峰命名做为struct字段名。比如is_admin对应IsAdmin。但id字段除名,id固定对应ID。

以上是关于db2gorm -- 将mysql数据表转为gorm struct的主要内容,如果未能解决你的问题,请参考以下文章

利用线上数据验证系统 Gor

openresty + gor+minio 集成

php如何将mysql数据转为数组

python使用pandas将mysql数据表转为excel表格

将MySQL数据库转为SQL脚本文件

如何将java程序里的一段连接mysql的语句转为连接sqlserver语句。连接的是sqlser