gorm的自动化工具gen_已设置图床

gorm的自动化工具gen

官方

https://gorm.io/zh_CN/gen/

假设数据库结构如

Image1

这里使用gen-tool

安装

go install gorm.io/gen/tools/gentool@latest

用法

gentool -h

Usage of gentool:
 -c string
       配置文件名、默认值 “”、命令行选项的优先级高于配置文件。 
 -db string
       指定Driver,默认值“mysql”,referer:https://gorm.io/docs/connecting_to_the_database.html
 -dsn string
       用于连接数据库的DSN reference: https://gorm.io/docs/connecting_to_the_database.html
 -fieldNullable
       当字段允许空时用指针生成
 -fieldWithIndexTag
       生成带有gorm index 标签的字段
 -fieldWithTypeTag
       生成带有gorm type标签的字段
 -modelPkgName string
       生成模型代码包名称。
 -outFile string
       Genrated 查询代码文件名称,默认值:gen.go
 -outPath string
       指定输出目录(默认 “./dao/query”)
 -tables string
       指定要生成的表名称,默认所有表。
 -onlyModel
       指生成Models不生成对应的query
 -withUnitTest
       生成单元测试,默认值 false, 选项: false / true
 -fieldSignable
       detect integer field's unsigned type, adjust generated data type

Example

gentool -dsn "user:pwd@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" -tables "orders,doctor"

gentool -c "./gen.tool" # 配置文件像下面
version: "0.1"
database:
  # consult[https://gorm.io/docs/connecting_to_the_database.html]"
  dsn : "username:password@tcp(address:port)/db?charset=utf8mb4&parseTime=true&loc=Local"
  # 选择mysql或者其他引擎,比方sqlserver
  db  : "mysql"
  # 指定要生成的table,流控则全部
  tables  : "user"
  # 指定输出目录
  outPath :  "./dao/query"
  # 输出的代码,默认gen.go
  outFile :  ""
  # 是否生成单元测试
  withUnitTest  : false
  # generated model code's package name
  # 生成的model的代码的包名
  modelPkgName  : ""
  # 使用指针当字段是空的
  fieldNullable : false
  # 生成的字段带有gorm tag
  fieldWithIndexTag : false
  # 生成的字段时候带有gorm type 标签
  fieldWithTypeTag  : false

ubuntu将gobin加入到PATH的做法

个人来说,gentool没有被加入到PATH中,这边手动把GOPATH加入到PATH中,我用的是

zsh,所以把环境变量加入到~/.zshrc中,参考下面的命令

Image2

echo 'export PATH=$PATH:~/go/bin' | tee -a ~/.zshrc

现在gentool可以在任意地方被调用了

Image3

实例

在项目根目录新疆gentool文件里面写入内容

version: "0.1"
database:
  # consult[https://gorm.io/docs/connecting_to_the_database.html]"
  dsn : "root:root@tcp(127.0.0.1:3306)/school?charset=utf8mb4&parseTime=true&loc=Local"
  # 选择mysql或者其他引擎,比方sqlserver
  db  : "mysql"
  # 指定要生成的table,流控则全部
  # 指定输出目录
  outPath :  "./dao/query"
  # 输出的代码,默认gen.go
  outFile :  ""
  # 是否生成单元测试
  withUnitTest  : false
  # generated model code's package name
  # 生成的model的代码的包名
  modelPkgName  : "models"
  # 使用指针当字段是空的
  fieldNullable : false
  # 生成的字段带有gorm tag
  fieldWithIndexTag : false
  # 生成的字段时候带有gorm type 标签
  fieldWithTypeTag  : false

然后使用gentool指定-c

结果如在dao包下生成了对应的models和query

Image4

使用gen代码工具的参合

package main

// gorm gen configure

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"

	"gorm.io/gen"
)

const MySQLDSN = "root:root@tcp(127.0.0.1:3306)/school?charset=utf8mb4&parseTime=True"

func connectDB(dsn string) *gorm.DB {
	db, err := gorm.Open(mysql.Open(dsn))
	if err != nil {
		panic(fmt.Errorf("connect db fail: %w", err))
	}
	return db
}

func main() {
	// 指定生成代码的具体相对目录(相对当前文件),默认为:./query
	// 默认生成需要使用WithContext之后才可以查询的代码,但可以通过设置gen.WithoutContext禁用该模式
	g := gen.NewGenerator(gen.Config{
		// 默认会在 OutPath 目录生成CRUD代码,并且同目录下生成 model 包
		// 所以OutPath最终package不能设置为model,在有数据库表同步的情况下会产生冲突
		// 若一定要使用可以通过ModelPkgPath单独指定model package的名称
		OutPath: "dal/query",
		/* ModelPkgPath: "dal/model"*/

		// gen.WithoutContext:禁用WithContext模式
		// gen.WithDefaultQuery:生成一个全局Query对象Q
		// gen.WithQueryInterface:生成Query接口
		Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
	})

	// 通常复用项目中已有的SQL连接配置db(*gorm.DB)
	// 非必需,但如果需要复用连接时的gorm.Config或需要连接数据库同步表信息则必须设置
	g.UseDB(connectDB(MySQLDSN))

	// 从连接的数据库为所有表生成Model结构体和CRUD代码
	// 也可以手动指定需要生成代码的数据表
	g.ApplyBasic(g.GenerateAllTable()...)

	// 执行并生成代码
	g.Execute()
}

实际上生成的代码与gentool一样

Image5

如何使用生成的代码?

  1. 首先生成代码

  2. 然后

  3. Image6

  4. 可以参考如下增删改查

  5. ` - ```

func main() {
// 设置默认DB对象
query.SetDefault(dal.DB)

// 创建
b1 := model.Book{
	Title:       "《Go语言之路》",
	Author:      "七",
	PublishDate: time.Date(2023, 11, 15, 0, 0, 0, 0, time.UTC),
	Price:       100,
}
err := query.Book.WithContext(context.Background()).Create(&b1)
if err != nil {
	fmt.Printf("create book fail, err:%v\n", err)
	return
}

// 更新
ret, err := query.Book.WithContext(context.Background()).
	Where(query.Book.ID.Eq(1)).
	Update(query.Book.Price, 200)
if err != nil {
	fmt.Printf("update book fail, err:%v\n", err)
	return
}
fmt.Printf("RowsAffected:%v\n", ret.RowsAffected)

// 查询
book, err := query.Book.WithContext(context.Background()).First()
// 也可以使用全局Q对象查询
//book, err := query.Q.Book.WithContext(context.Background()).First()
if err != nil {
	fmt.Printf("query book fail, err:%v\n", err)
	return
}
fmt.Printf("book:%v\n", book)

// 删除
ret, err = query.Book.WithContext(context.Background()).Where(query.Book.ID.Eq(1)).Delete()
if err != nil {
	fmt.Printf("delete book fail, err:%v\n", err)
	return
}
fmt.Printf("RowsAffected:%v\n", ret.RowsAffected)

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/126880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《QT从基础到进阶·十五》用鼠标绘制矩形(QGraphicsView、QPainter、QGraphicsRectItem)

以下是鼠标绘制矩形最全的一种用法,完整源码将会放在最后面。 QT版本:5.15.2 VS版本:2019 1、在界面加载一张图片 界面的搭建选用QGraphicsView,自定义类GraphicsView继承QGraphicsView,在主程序中点击按钮打开 图片&…

Hello World背后的逻辑

一门语言的开发入门,总是抬手就能整出一个「Hello World Demo」。比如下面这样: 显然,熟悉 iOS 开发的同学都知道,上面这个来自 Objective-C。 今天,我们就从这熟悉的代码入手,来一起研究研究「Hello Worl…

verdi如何打开时可以加载配置比如字体

打开tcl使能 找到配置字体的命令 其实其他有需要的文件配置都可以在这里找到对应的指令 存储文件 新建verdi001.tcl文件 输入想要调整的字体以及大小 verdiSetFont -font "Bitstream Vera Sans" -size "18" verdiSetFont -monoFont "Courier&q…

Kafka JNDI 注入分析(CVE-2023-25194)

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SAS…

做哪些副业可以日赚一百?对程序员来说简直不要太容易!

日赚一百?对程序员来说简直不要太容易!下面给程序员们推荐一些日赚100的副业: ①外包接单 程序员简单粗暴赚钱的副业之一。 外包接单的类型包括但不限于:软件开发、硬件开发、小程序功能开发、web开发……大到一个系统的开发、…

pip 安装任意软件包报错

现象 使用 pip 命令时提示 查看源码 可以看到是从 pip 包中导入 main失败,点击查看目录 main 文件不见了,判断是文件缺失,重装 pip 即可 # python3 下载 pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # python2 下载…

输入网址到网页显示,期间发生了什么?(收藏篇)

解析url 首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。 DNS解析 通过浏览器解析 URL 并…

uniapp使用vur-cli新建项目并打包

新建项目 npm install -g vue/cli vue create -p dcloudio/uni-preset-vue my-project选择默认模板npm run dev:h5 运行 安装sass和uview &#xff08;npm安装失败&#xff09; bug&#xff1a;使用uni.scss中的变量或样式&#xff0c;<style lang"scss"> 必…

亚马逊鲲鹏系统六大优势

亚马逊鲲鹏系统六大优势凭借其独特的能力&#xff0c;完全模拟真实的人类行为。只需几个简单的步骤 就可以自由安排任务&#xff0c;让所有账户随时发挥最大的作用。 1、全自动化操作 可以全自动批量注册买家号、AI智能养号、全自动批量测评&#xff0c;模拟人类的操作行为例…

vue-element-admin 集成框架设置中文语言

首先拉取中文版分支代码 https://github.com/PanJiaChen/vue-element-admin/tree/i18n &#xff08;下载卡的话&#xff0c;下载小羊的压缩包&#xff0c;已上传资源&#xff09; \src\lang\index.js 改完dangdangdang可以啦

CSDN中调整图片和文本样式

1.调整图片比例 插入图片后&#xff0c;觉得图片比例不协调&#xff0c;想改小点。只需要在文件后缀加个参数即可&#xff1a;?pic_center 60x。 NOTE&#xff1a;等号左边一定要加个空格&#xff0c;否则格式不生效 2.修改字体颜色 如上 NOTE&#xff1a;等号左边一定要…

Leo赠书活动-07期 【嵌入式虚拟化技术与应用】文末送书

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

UML与PlantUML简介

UML与PlantUML 1、UML与PlantUML概述2、PlantUML使用 1、UML与PlantUML概述 UML&#xff08;Unified Modeling Language&#xff09;是一种统一建模语言&#xff0c;为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言&#xff0c;独立于任何具体程序设计语言…

什么是伺服电机?Parker派克伺服电机盘点

一、什么是伺服电机&#xff1f; 要准确地定义伺服电机&#xff0c;我们首先需理解其核心特性&#xff1a;反馈与闭环控制。伺服电机凭借这些特性&#xff0c;能精确控制扭矩、速度或位置&#xff0c;即使在零速度下&#xff0c;也能保持足够的扭矩以锁定负载。 伺服电机与其…

RAW图像处理软件Capture One 23 Enterprise mac中文版功能特点

Capture One 23 Enterprise mac是一款专业的图像处理软件&#xff0c;旨在为企业用户提供高效、快速和灵活的工作流程。 Capture One 23 Enterprise mac软件的特点和功能 强大的图像编辑工具&#xff1a;Capture One 23 Enterprise提供了一系列强大的图像编辑工具&#xff0c;…

【Linux语音控制 安卓设备刷短视频 orangePi zero2 H616 (已开源) 】.md uptada:23/11/07

文章目录 H616_实现Ubuntu语音控制安卓设备刷短视频小美效果展示H616 ubuntu系统 安装adb智能公元 SU-03T 离线语音模组 固件制作配合串口实现 小美_控制安卓刷抖音 H616_实现Ubuntu语音控制安卓设备刷短视频 注意&#xff1a;orangePi zero2 H616 安装系统为ubuntu 小美效果…

Linux Centos配置邮件发送

Linux Centos配置邮件发送 这里使用的是外部发送邮件方式&#xff0c;也就是使用自己的账号发送 第一步 首先要开启STMP授权码&#xff0c;以QQ邮箱为例 配置文件 vim /etc/mail.rc找到之后在最下面添加如下 #邮箱set from3324855376qq.com #默认smtp发送&#xff0c;stmp…

自动驾驶系统激光雷达传感器反射率标定板

自动驾驶技术正在全球范围内快速发展和推广。在中国&#xff0c;自动驾驶技术也得到了高度重视和大力支持。中国政府已经出台了一系列政策&#xff0c;推动自动驾驶技术的发展和应用。例如&#xff0c;上海、北京等地已经开放了自动驾驶测试道路&#xff0c;并开展了自动驾驶公…

剑指JUC原理-17.CompletableFuture

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

Spring boot 整合grpc 运用

文章目录 GRPC基础概念&#xff1a;Protocol Buffers&#xff1a;proto 基础语法&#xff1a;调用类型&#xff1a; Spring boot 整合 grpc项目结构&#xff1a;整合代码&#xff1a;父 pomproto 模块服务端&#xff1a;客户端&#xff1a;实际调用&#xff1a; 原生集成 GRPC基…