- Created by 郭强, last modified on Sep 14, 2022
dao
命令是CLI
中最频繁使用、也是框架设计的工程规范能否准确落地的关键命令。该命令用于生成dao
数据访问对象、do
数据转化模型及entity
实例数据模型Go
代码文件。由于该命令的参数、选项较多,我们推荐使用配置文件来管理生成规则。
关于框架项目工程规范介绍请查看 代码分层设计 章节。
使用方式
大部分场景下,进入项目根目录执行 gf gen dao
即可。以下为命令行帮助信息。
$ gf gen dao -h USAGE gf gen dao [OPTION] OPTION -p, --path directory path for generated files -l, --link database configuration, the same as the ORM configuration of GoFrame -t, --tables generate models only for given tables, multiple table names separated with ',' -x, --tablesEx generate models excluding given tables, multiple table names separated with ',' -g, --group specifying the configuration group name of database for generated ORM instance, it's not necessary and the default value is "default" -f, --prefix add prefix for all table of specified link/database tables -r, --removePrefix remove specified prefix of the table, multiple prefix separated with ',' -j, --jsonCase generated json tag case for model struct, cases are as follows: | Case | Example | |---------------- |--------------------| | Camel | AnyKindOfString | | CamelLower | anyKindOfString | default | Snake | any_kind_of_string | | SnakeScreaming | ANY_KIND_OF_STRING | | SnakeFirstUpper | rgb_code_md5 | | Kebab | any-kind-of-string | | KebabScreaming | ANY-KIND-OF-STRING | -i, --importPrefix custom import prefix for generated go files -d, --daoPath directory path for storing generated dao files under path -o, --doPath directory path for storing generated do files under path -e, --entityPath directory path for storing generated entity files under path -t1, --tplDaoIndexPath template file path for dao index file -t2, --tplDaoInternalPath template file path for dao internal file -t3, --tplDaoDoPath template file path for dao do file -t4, --tplDaoEntityPath template file path for dao entity file -s, --stdTime use time.Time from stdlib instead of gtime.Time for generated time/date fields of tables -w, --withTime add created time for auto produced go files -n, --gJsonSupport use gJsonSupport to use *gjson.Json instead of string for generated json fields of tables -v, --overwriteDao overwrite all dao files both inside/outside internal folder -c, --descriptionTag add comment to description tag for each field -k, --noJsonTag no json tag will be added for each field -m, --noModelComment no model comment will be added for each field -a, --clear delete all generated go files that do not exist in database -h, --help more information about this command EXAMPLE gf gen dao gf gen dao -l "mysql:root:12345678@tcp(127.0.0.1:3306)/test" gf gen dao -p ./model -g user-center -t user,user_detail,user_login gf gen dao -r user_ CONFIGURATION SUPPORT Options are also supported by configuration file. It's suggested using configuration file instead of command line arguments making producing. The configuration node name is "gfcli.gen.dao", which also supports multiple databases, for example(config.yaml): gfcli: gen: dao: - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test" tables: "order,products" jsonCase: "CamelLower" - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/primary" path: "./my-app" prefix: "primary_" tables: "user, userDetail"
配置示例
/hack/config.yaml
gfcli: gen: dao: - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test" tables: "order,products" jsonCase: "CamelLower" - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/primary" path: "./my-app" prefix: "primary_" tables: "user, userDetail" # sqlite需要自行编译带sqlite驱动的gf,下载库代码后修改路径文件(gf\cmd\gf\internal\cmd\cmd_gen_dao.go)的import包,取消注释即可。sqlite驱动依赖了gcc - link: "sqlite:./file.db"
参数说明
名称 | 必须 | 默认值 | 含义 | 示例 |
---|---|---|---|---|
gfcli.gen.dao | 是 | dao 代码生成配置项,可以有多个配置项构成数组,支持多个数据库生成。不同的数据库可以设置不同的生成规则,例如可以生成到不同的位置或者文件。 | - | |
link | 是 | 分为两部分,第一部分表示你连接的数据库类型mysql , postgresql 等, 第二部分就是连接数据库的dsn 信息。具体请参考 ORM使用配置 章节。 | - | |
path | internal | 生成 | ./app | |
group | default | 在数据库配置中的数据库分组名称。只能配置一个名称。数据库在配置文件中的分组名称往往确定之后便不再修改。 |
| |
prefix | 生成数据库对象及文件的前缀,以便区分不同数据库或者不同数据库中的相同表名,防止数据表同名覆盖。 |
| ||
removePrefix | 删除数据表的指定前缀名称。多个前缀以, 号分隔。 | gf_ | ||
tables | 指定当前数据库中需要执行代码生成的数据表。如果为空,表示数据库的所有表都会生成。 | user, user_detail | ||
tablesEx | Tables Excluding ,指定当前数据库中需要排除代码生成的数据表。 | product, order | ||
jsonCase | CamelLower | 指定 | Snake | |
stdTime | false | 当数据表字段类型为时间类型时,代码生成的属性类型使用标准库的 | true | |
gJsonSupport | false | 当数据表字段类型为 | true | |
overwriteDao | false | 每次生成dao 代码时是否重新生成覆盖dao/internal 目录外层的文件。注意dao/internal 目录外层的文件可能由开发者自定义扩展了功能,覆盖可能会产生风险。 | true | |
importPrefix | 通过go.mod 自动检测 | 用于指定生成 | github.com/gogf/gf | |
descriptionTag | false | 用于指定是否为数据模型结构体属性增加 | true | |
noModelComment | false | 用于指定是否关闭数据模型结构体属性的注释自动生成,内容为数据表对应字段的注释。 | true |
使用示例
仓库地址:https://github.com/gogf/focus-single
1、以下3
个目录的文件由dao
命令生成:
路径 | 说明 | 详细介绍 |
---|---|---|
/internal/dao | 数据操作对象 | 通过对象方式访问底层数据源,底层基于ORM组件实现。往往需要结合entity 和do 通用使用。该目录下的文件开发者可扩展修改,但是往往没这种必要。 |
/internal/model/do | 数据转换模型 | 数据转换模型用于业务模型到数据模型的转换,由工具维护,用户不能修改。 工具每次生成代码文件将会覆盖该目录。 |
/internal/model/entity | 数据模型 | 数据模型由工具维护,用户不能修改。工具每次生成代码文件将会覆盖该目录。 |
2、model
中的模型分为两类:数据模型和业务模型。
数据模型:通过CLI
工具自动生成 model/entity
目录文件,数据库的数据表都会生成到该目录下,这个目录下的文件对应的模型为数据模型。数据模型即与数据表一一对应的数据结构,开发者往往不需要去修改并且也不应该去修改,数据模型只有在数据表结构变更时通过CLI
工具自动更新。数据模型由CLI
工具生成及统一维护。
业务模型:业务模型即是与业务相关的数据结构,按需定义,例如service
的输入输出数据结构定义、内部的一些数据结构定义等。业务模型由开发者根据业务需要自行定义维护,定义到model
目录下。
3、dao
中的文件按照数据表名称进行命名,一个数据表一个文件及其一个对应的DAO
对象。操作数据表即是通过DAO
对象以及相关操作方法实现。dao
操作采用规范化设计,必须传递ctx
参数,并在生成的代码中必须通过Ctx
或者Transaction
方法创建对象来链式操作数据表。
注意事项
需要手动编译的数据库类型
gen dao
命令涉及到数据访问相关代码生成时,默认支持常用的若干类型数据库。如果需要Oracle
数据库类型支持,需要开发者自己修改源码文件后自行本地手动编译生成CLI
工具随后安装,因为这两个数据库的驱动需要CGO
支持,无法预编译生成给大家直接使用。
关于bool
类型对应的数据表字段
由于大部分数据库类型都没有bool
类型的数据表字段类型,我们推荐使用bit(1)
来代替bool
类型。gen dao
命令会自动识别bit(1)
数据表字段并生成bool
类型的属性。此外,我们不推荐使用tinyint(1)
作为bool
类型。
例如,表字段:
生成的属性:
- No labels
102 Comments
智刚
gf-cli
如果是低于此版本使用gf gen dao
生成的代码,更新到图片上的版本,出现生成的版本,需要同时删除dao
下和dao/internal/
下对应的文件,新版不是指针版本了。郭强
去掉指针设计是因为对象访问安全的缘故,具体请参考章节:对象封装设计(更新中)
xushushun
但是去掉了指针给我带来了一点困扰,
这样写法就没法叠加where的条件了,应该如何解决.我试过
mo := &dao.SysRoleMenu
可以解决,但是我不知道这样写是不是又用回了指针,正确的做法应该是怎样的.张育铭
同样的方法,应该是一样的
郭强
你呀!你的
dao.SysRoleMenu
相当于只是一个方法封装对象,你的各个model
方法会返回一个新的链式操作对象,保存返回的对象用以后续的ORM
操作。例如:xushushun
我又研究了一遍示例项目搞懂了,感谢解答.目前对全局变量有点懵懂,看来得加深理解.
Chris Lee
各位大佬。分表的场景下怎么合理使用
gen
代码生成。比如订单表每月生成一个,表名称类似于order_202001、order_202002、order_202003
。郭强
目前
gen dao
命令不支持识别分表,可以加个正则匹配匹配的配置项来做识别,欢迎提PR。aloha
请问下 目前支持
mongoDB
么?支持的话有没有代码生成操作示例?郭强
暂不支持,不过根据接口设计可以很方便支持的,感兴趣可以参与贡献社区模块来对接,驱动开发请参考:ORM接口开发-驱动开发
朱华 Hunk
1.16
下生成的dao
似乎与1.15
下不一样了吧?不会直接返回表结构相应的对象了?而是改成map
返回了么?针对这块,有没有一个专门的介绍帖子?郭强
cli
只是开发辅助工具,与框架组件本身关系不大。从cli v1.16
版本开始简化了生成的代码内容,具体看下发布说明以及生成的代码。朱华 Hunk
从
1.15
过来,一开始对1.16
还是很多不适应。调整了大量代码后,现在还是可以用了。不过,从开发效率上来说,还是比较喜欢1.15
的那种风格。现在1.16
这种风格,反倒比较像是使用PHP
了。感觉这块把字段给弱化后,在编写代码时,为了要写一个预定义的字段,要写老长一段代码,我一般是这样:dao.xxx.Columns.Fieldxxx
要写4级才行。这块看看能不能给想办法简化下(或者是我还不会用^_^)。不然还不如直接写fieldxxx
方便。旧代码我现在都调整为了
Struct
或Structs
。这样也可以用起来了。youxue2016
估计你用过gf2.0就是一种全新的感受 了.我是蒙圈中
赵会南
jsonCase
能不能直接使用数据库的字段名赵会南
不然重构业务的时候比较复杂
郭强
设置为空即可。
spikejim
在使用
go-zero
框架时, 把它的数据库操作换成了dao
, 方便了很多。但是二者对比, 希望增加一个和
go-zero
一样的功能,即mysql+redis
自动生成: 生成带redis cache
或者不带redis cache
的代码逻辑。gf gen dao -l mysqlxxxxxx -r redis:xxxxxx
郭强
缓存的逻辑由业务控制,使用
Cache
方法即可,使用简便,具体请查看章节:ORM链式操作-查询缓存randol
gf gen dao -l
后面参数,mysql
密码中如果有带感叹号会报错,提示event not found
刘羽禅
各种参数都写在
config.toml
配置文件里,然后只执行gf gen dao
命令SnoWich
请问一下 删除数据表的指定前缀名称 removePrefix 这个参数可以多个吗
郭强
可以,看下
help
说明。赵会南
发现一个问题 当有多个 gfcli.gen.dao 配置时 gf gen dao 生成model.go 里面只有最后一个配置的表模型
郭强
试试最新的
gf-cli
的master
分支。Baob.wu
GoFrame CLI Tool v1.17.0, https://goframe.org
GoFrame Version: v1.16.1 in current go.mod
同样出现
Hans
大佬, 请问下自己写的驱动, gf gen dao 的时候无法初始化怎么办?
郭强
这种情况你需要自行修改
CLI
源码以增加对第三方数据库的支持,import
一下就可以了。Hans
谢谢, 之前发现前面一片文档里有说明, 已经解决了
jack
-c参数怎么没效果呀?我执行 gf gen dao -c config-test.toml 还是用的config.toml
frans
现在的gf-demos项目, 在这个项目里面用gf工具生成出来的dao 和 model 文件有些重复了, 可否修改下 gf-demos项目?
iamyl
指定了path之后不能根据path的目录结构自动生成目录,需要手动建立好之后才可以生成到指定目录,希望能根据path配置的路径自动生成目录.
还有就是dao和model的名称是定死的,希望能配置别名,生成的时候就不是必须用dao和model这两个名字了,不然有多个数据库时使用就很麻烦,因为同名了
简云
Cli 升级工具应该是发一个大的公告, 我刚刚生成一下傻眼了.怎么回事不一样.
才发现上面写到v1.17 会进行简化.难搞喔.
朱华 Hunk
cli工具似乎是一直是最新版本。能不升还是不要升的好。现在最新版本与1.16.6差异很大。
智刚
1.17 需要传一个上下文
nginx007
GoFrame CLI Tool v1.17.0,
只能默认调用项目目录下的 config.toml
李静
descriptionTag 和 noModelComment 设置的都是true,但生成的model.go 中的注释是空的,连的pgsql,数据库中是有设注释的:pic2.png (939×491) (aucheer.tech) pic1.png (930×423) (aucheer.tech)
郭强
文档内容都是最新版,需要自己编译master分支
李静
好的,谢谢
xiaozi
表名都是加了s的复数,就像Laravel一样,生成的model和dao可怎么把s去了?
强迫症晚期。
李育真
能否在dao层自动添加一些单表的简单增删改查呢?
郭强
你安装最新的
gf-cli
试试,如何安装请查看gf-cli
仓库README
xushushun
2.0 生成dao的时候 oracle数据库 不会读取字段说明信息生成到代码中
强仔
2.0 mssql数据库中字段类型为Money 生成的entity json的类型是string, 这是有参数控制吗? 类型错误,会导致生成的接口文档也是错误的
Jarvis
gfcli.gen.dao
部分的link
配置,是不是和db
部分的配置重复了?可以只配置一处吗?海亮
link可能一样,但多数情况是不同的,也有其它配置信息的差异,也有不同环境的情况,为避免不必要的影响,所以不应该一样。
郭强
database
的配置是业务配置,这里的gfcli
配置是工具配置。也就是说,业务配置是线上运行需要的(一般在
manifest/config
目录下),而gfcli
配置只是开发阶段需要的(一般在hack
目录下)。两个配置文件应该需要分开,并且我们的框架支持如此,可以参考示例项目。
Jarvis
收到,明了了,感谢回复
Marele@th
gen
自动把mysql
里的boolean
转化成了int
, 有办法对这个行为进行修改或者定制吗?郭强
应该
mysql
里面就是int
类型,你可以把建表sql
提个issue
我们一起看看。强仔
这里是不是可以增加一个配置,
json
是否可以格式化显示float
类型。郭强
字段如果是
json
类型,可以生成string/*gjson.Json
类型,如果是*gjson.Json
类型的话从v2.1
版本开始解决了浮点数精度问题。强仔
那太好了。老大威武
willem
tables, tablesEx
能不能支持类似正则,比如sys_*
,只想对某些前缀的表进行gen
郭强
目前不支持正则,写个多个来过滤吧。
hmy
// =================================================================================
// Code generated by GoFrame CLI tool. DO NOT EDIT. Created at 2022-05-01 20:41:03
// =================================================================================
Created at 2022-05-01 20:41:03 这个可以配置隐藏掉吗
海亮
WithTime参数可以去掉
feran
请问最新的gf gen dao路径是不是有变化
lover
这里 https://github.com/gogf/gf/releases 下载已经编译好的二进制,自己编译的我试了下目录结构确实变了
hh
gf gen dao无法生成文件,报驱动找不到。我的gf版本如下。
λ gf -v
GoFrame CLI Tool v2.1.0-rc, https://goframe.org
GoFrame Version: v2.1.0-rc in current go.mod
CLI Installed At: D:\Program Files\Go\bin\gf.exe
CLI Built Detail:
Go Version: go1.17.9
GF Version: v2.1.0-rc
Git Commit: 2022-05-17 16:43:10 62d91438f2377debe7ead16ab058d9dd707744ad
Build Time: 2022-05-17 16:41:42
报错如下:
λ gf gen dao
cannot find database driver for specified database type "mysql", did you misspell type name "mysql" or forget importing the database driver? possible reference: https://github.com/gogf/gf/tree/master/contrib/drivers
1. cannot find database driver for specified database type "mysql", did you misspell type name "mysql" or forget importing the database driver? possible reference: https://github.com/gogf/gf/tree/master/contrib/drivers
按照之前的教程,在main.go上手动引入了_ "github.com/gogf/gf/contrib/drivers/mysql/v2",还是不行。求帮助
韩达
我昨天遇到这个问题了。猜想应该是这个版本的cli-tool未引入mysql。
解决1:拉取,自行修改
CLI
源码,自己编译使用;解决2:使用旧版本,比如我目前版本:
GoFrame CLI Tool v2.0.6, https://goframe.org
GoFrame Version: v2.0.6 in current go.mod
hh
多谢,因为新版本里有解决with可以查找倒嵌套的结构体里的字段的问题。我尝试了解决1,还是没有解决我的问题,只好回退到了2.0.6。
fushen
v2.1.0-rc3 版本好像解决了。可以试试
jervis.yao
v2.1.0-rc3版本。gen dao没有生成service。默认gen service需要logic目录,新建后执行gen service done!后logic目录没有任何东西,请问是要废弃service生成吗?还是我用法不对
haima1004
解决了吗,我和你一样的问题
jervis.yao
没有,1.16版本发现yaml配置tablesEx,命令行-c参数,-e参数,多个group时候-g参数都不好用,等等问题都有,先放弃研究了...
haima1004
linux系统:
执行gf gen service生成报错
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ gf version
GoFrame CLI Tool v2.1.0-rc4, https://goframe.org
GoFrame Version: cannot find goframe requirement in go.mod
CLI Installed At: /usr/local/bin/gf
CLI Built Detail:
Go Version: go1.17.10
GF Version: v2.1.0-rc4
Git Commit: 2022-06-01 16:36:40 0639becccc486fda179b81e7a685f67c91b173a4
Build Time: 2022-06-01 16:34:52
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ gf gen service
source folder path "internal/logic" does not exist
手动新建internal/logic后,再次执行不生成文件
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ gf gen service
done!
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ ll internal/logic/
总用量 0
youxue2016
我发完贴才发现,我们的情况一样哦.我是win11系统,也是创建了logic目录后,无法生成service目录文件
youxue2016
使用最新的gf命令行工具,按照接口维护-gen service章节的gen service命令执行后,没有生成services目录,只是提示logic要创建.我创建了logic后,该如何操作才能生成service目录中的文件呢?还有logic目录的文件该如何书写呢?
郭强
建议等正式发布再使用
小奥
新版本没有指定目录的参数了 -c config.yaml 不起作用, mysql的链接可以生成,pgsql的链接提示 database initialization failed,感觉对pgsql支持相当不友好,以前的gf生成的pgsql的实体都没有字段描述
小奥
func doNewByNode(node ConfigNode, group string) (db DB, err error) {
c := &Core
if v, ok := driverMap[node.Type]; ok {
c.db, err = v.New(c, &node)
if err != nil
return c.db, nil
}
return nil, gerror.NewCodef(
gcode.CodeInvalidConfiguration,
`cannot find database driver for specified database type "%s", did you misspell type name "%s" or forget importing the database driver?`,
node.Type, node.Type,
)
}
driverMap 测试只有mysql,如何支持pgsql
小奥
请问v2啥时候支持pgsql
gf/v2 只支持
KingKong
我也是遇到了同样的问题,我是需要sqlite不成功
根据官方的提示修改注释编译后不成功:
cannot find database driver for specified database type "sqlite", did you misspell type name "sqlite" or forget importing the database driver?
应该是和我设置了 CGO_ENABLED=0 有关系。
海亮
sqlite要自己编译
下载gf代码再引入sqlite的驱动gf/contrib/drivers at master · gogf/gf (github.com) 再编译
海亮
文件路径在 gf\cmd\gf\internal\cmd\cmd_gen_dao.go
KingKong
我拉错脚本了,拉了gf-cli的代码,应该是编译 gf\cmd\gf 在这里引用sqlite驱动,谢谢
海亮
是的,现在gf-cli在gf主库里面了
KingKong
windows下会有错误,已经从wsl里搞定了。谢谢
海亮
18lkdev 文档改重复了,你看看是不是操作失误。
18lkdev
本来改了的,后来想了想又撤回了. 因为不确定你们版本更新不更新, 因为要改好几处文档升级了2.1 那么2.0.6的就会有问题
疯狂的黑熊
总结:
1、每次执行 gf gen dao 命令,除了 internal/service/internal/dao/internal/ 目录下的文件,都会重新生成,因为这些文件由工具维护,所以开发者尽量不去修改这些文件。
2、开发者可在 internal/service/internal/dao/internal/ 目录下进行扩展修改,但是往往没这种必要。
3、如果需要重新生成所有的文件,执行命令:gf gen dao -o
4、关于 jsonCase 配置项说明
| Case | Example |
|------------------------- |--------------------------|
| Camel | AnyKindOfString |
| CamelLower | anyKindOfString | default
| Snake | any_kind_of_string |
| SnakeScreaming | ANY_KIND_OF_STRING |
| SnakeFirstUpper | rgb_code_md5 |
| Kebab | any-kind-of-string |
| KebabScreaming | ANY-KIND-OF-STRING |
| 设置为空,或其他值 | 变量名和表字段名会保持一致 |
问冰
大佬们请问有没有办法把生成的结构体的s给去了,比如表名Users对应一个User结构体这样子= =
网络企鹅
最新版v2.x的gf gen dao有bug,
gJsonSupport
参数设置成了true,输出的entity中json字段还是string类型的。试验数据库mysql 5.7。跟踪goframe cli代码发现,问题出在gf\database\gdb\gdb_func_structure.go文件中的 CheckValueForLocalType 函数:该函数没有定义json类型的处理分支,最终默认返回了typeString,导致生成的entity中json字段类型变成了string。
如下所示,在CheckValueForLocalType函数中添加json处理分支,搞定!
李炳乐
确实有这个问题,而且还有一个问题数据库字段设置BIT(1)类型,生成的文件里字段属性不是bool类型而是 int
苏杰
v2.1.3版本的gf gen dao生成数据库字段类型好像和以前不一样了,uint变成了int类型。这个算bug么?还是特意的修改?
郭强
是个BUG
Neak
v2.1.2版本,gf gen dao生成的文件目录为:
/internal/dao/
/internal/dao/internal
/internal/model/do
/internal/model/entity
并非gf init自动创建工程的目录
/internal/service/internal/dao/
/internal/service/internal/dao/internal
/internal/service/internal/do
/internal/model/entity
朱华 Hunk
现在的生成Dao如果要重新配置数据库配置,应该从哪里着手?比如,原来是从config.toml default中读取的数据库配置,现在我想从代码中传入(比如要把部分dao修改配置为第二个数据库信息)。需要怎么配置才能让dao均生效?
Neak
配置中添加第二个数据库配置,配置group的字段。生成不会影响dao部分,dao/internal中的代码,Group会对应配置
db1没配置group,则默认default
db2配置了group,dao/internal中的Group会被赋值"db2"
朱华 Hunk
我是想不使用配置文件的情况下修改某一批dao的数据库配置。
我是想实现这样的:
我阅读代码,是发现dao的初始化是在框架中完成。不过我们的数据库配置都是默认从配置文件中读取的。我若想从内存中传到数据库配置应该怎么做呢?我想到的是,是不是可以实现一个自定义的cfg类。来替换掉原来的gcfg
Neak
可能尝试clone gf的源码,修改用于gen dao的template部分,把internal模板部分,新增自定义接口,放出来会比你实现自定义cfg来的轻松一些...
goframe框架服务层很多都围绕默认的cfg来运作的。
自己改动,内容有点多了吧。
此处还是郭大郭强 ,来解答吧。
朱华 Hunk
我看2.x里有cfg的接口实现,现在在尝试这一块。看看使用sqlite去实现下这个接口能不能行。只是由于gdb.New依赖于gcfg,所以不能在自己实现的接口中去使用gdb.New,只能使用原生db操作了。
李炳乐
求助:关于
bool
类型对应的数据表字段,我数据库创建了status字段为BIT类型:命令工具执行:gf gen dao 后生成的文件字段属性并不是bool 类型的值,反而是int类型,如下:
无法自动识别并生成 bool 类型
asb
您好,我是Go的新手,最近想以GoFrame來入手,目前想執行focus-single來學習,想釐清一下database的概念,gf gen dao的時候會同時建立資料庫裡的table的嗎?還是單純的建立go file而已呢?
以前我是用Laravel,在Laravel的概念是建好model,就可以用migration的方式自動創建好資料庫的table,在goframe裡面有一樣的概念嗎?
因為我run focus-single的時候make dao,看到done!的提示,但資料庫依舊沒有任何的table,因此提問,謝謝!
糖水不加糖
不会创建表信息.Focus聚焦社区这个是使用教程,参照示例创建数据库.gf gen dao是单向的将表映射成实体结构文件.
问冰
您好,我是一名刚刚接触go项目的新手,请问一下如果我有联表查询的需求该如何在dao层操作呢?比如查询user表,需要用user表中的menu_id去查询相应的menu一起返回。我以前的操作是新建一个包含了所需的user、menu的字段的结构体,然后在进行联表查询。但是在这个dao层中的工具会在每次生成模型的时候覆盖掉entity层的结构体,请问我该将新建的结构体保存在哪里,或者是该采用哪一种新的方法来解决这个问题?谢谢!
糖水不加糖
复制entity并对复制出来的对象增加关联成员字段.
问冰
非常感谢!
KingKong
各位大佬,此处有个疑问想咨询一下,在2.3版本中的演示代码中,发现了在 gen dao 后,写 logic,还需要在 model目录下再手动写一个类似于api里的req一样的结构。
这个结构和req的结构相比,除了 package和 meta不一样,字段基本上是一样的,想问一下为什么要这样设计。
再就是如果我不写这个model/user.go 直接使用 v1下的定义的结构,是不是也是一样的效果。
糖水不加糖
api处定义的是入参绑定与校验等,在model下的这层(数据模型)定义的是数据操作相关的,跟数据库真实字段挂钩.想定义到哪都可以,只是说与数据库相关联的定义在model下更为直观.
KingKong
明白了,实际操作发现了这个问题,api/model/entity分开,确实是有必要