Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

真心的说哈,如果你的项目没有用上这个,千万别用。并不能节省什么工作量。 #1218

Open
yuangu opened this issue Sep 22, 2024 · 5 comments

Comments

@yuangu
Copy link

yuangu commented Sep 22, 2024

如题,我花费了一整天研究这个东西,发现并不能节省工作量。如果有朋友想上这个工具的,先阅读一下我写的,再决定使用这个工具。以下内容仅个人观点

简单来说,这个工具是通过数据库或者SQL语句来生成gorm的模型声明,以及查询语句。
1、 首先 如果仅为了生成模型,使用sql语句还是直接用数据库工具操作,或者手写go语句直接描述模型其实都是一样的工作量。对不对?那么还不如直接用go语句来定义。至于查询功能,gorm提供的接口已经很方便了。
2、 这个工具不能自动生成类似于 autoCreateTime, autoUpdateTime 这么方便的gorm 高级选项 还有很多。也许你想反驳我,嗯,我贴一下脱裤子打屁的代码吧。

	fieldOpts := []gen.ModelOpt{
		gen.FieldGORMTag("update_time", func(tag field.GormTag) field.GormTag {
			tag.Set("autoUpdateTime", "")
			return tag
		}),
		gen.FieldGORMTag("create_time", func(tag field.GormTag) field.GormTag {
			tag.Set("autoCreateTime", "")
			return tag
		}),
	}

如果您的表设计,字段命名比较随意的话,比如update_time, update_at....那么,您的兼容生成代码会非常多。请阅读一下文档:
https://gorm.io/zh_CN/docs/models.html
3、 null 类型数据只能转成指针,那么方便的 sql.NullString 是使用不了的。如果这个字段标注了uniqueIndex ,你会发现,不如sql.NullString

@ronge1012
Copy link

确实,这里使用起来很难受,我现在去适配他

@qqxhb
Copy link
Member

qqxhb commented Oct 19, 2024

谢谢你对GORM Gen的关注与问题的详细反馈!

  1. 关于生成模型的效率问题:虽然手写模型和生成模型在小规模下看似工作量相近,但在实战中,尤其是在处理多张表和大量字段时,自动生成模型显著提高了工作效率,减少了可能的错误。生成查询语句的功能不仅减少了代码重复,还提升了查询的安全性和简洁度。

  2. 关于高级选项的自动生成:GORM Gen确实可以通过配置来支持autoCreateTime和autoUpdateTime等高级选项。例如:

   fieldOpts := []gen.ModelOpt{
       gen.FieldGORMTag("update_time", func(tag field.GormTag) field.GormTag {
           tag.Set("autoUpdateTime", "")
           return tag
       }),
       gen.FieldGORMTag("create_time", func(tag field.GormTag) field.GormTag {
           tag.Set("autoCreateTime", "")
           return tag
       }),
   }

标准的 CreatedAt 和 UpdatedAt 字段更是不需额外配置即可支持,可以参考Gorm文档https://gorm.io/docs/conventions.html#Timestamp-Tracking。
你所提到的字段命名随意问题,我们理解主要是设计上的问题,而并非工具的缺陷。所以需要开发者做兼容性的配置,但都是一次性的全局配置,不需要重复配置。

  1. 关于 null 类型数据处理:GORM Gen 支持通过配置 ModifyField 或者datamapping 选项来使用 sql.NullXxx 类型数据。当然我们考虑了下,最新代码的增加了 WithDataTypesNullType 配置更加便捷,将自动使用 datatypes.NullXxx 类型(sql.Null 22以下版本支持的不全),更好地适应开发需求。没有设置成默认选项,考虑这并不是标准的基础类型,更多的人使用的还是基础类型(如:int32/*int32)。

再一次感谢你的宝贵意见,愿更多开发者可以从 GORM Gen 中受益!如有更多问题,欢迎继续提出。祝好!

@lz-freedom
Copy link

写起来确实有点费时间,基础的增删改查还好,稍微复杂点的查询基本实现不了,例如COALESCE,还得走 gorm,关联关系也有一些问题,Issues回复表较慢,两三个月没人回

用在基础增删改查方面确实能提升一些开发效率和安全性

@Oranzh
Copy link

Oranzh commented Dec 26, 2024

基本的查询确实很方便,但是复杂的我看到有动态SQL, 但是这个需要怎么join其他的?有没有比较官方的demo

@lysShub
Copy link

lysShub commented Feb 1, 2025

这个主要是用来curd的吧?模型还是像原始gorm一样用代码手动定义,相信没有多少从schema生成模型的(可能跨语言情况下有这种需求)。

相比与原始的gorm,可以避免写字面量,部分操作也有了类型、在安全和使用便捷性上是非常大的提升;相较于ent也更简单。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants