检查工具配置
在使用脚手架工具之前,请检查本地的cli
工具配置是否正确。默认的配置如下:
hack/config.yaml
# CLI tool, only in development environment.
# https://goframe.org/docs/cli
gfcli:
gen:
dao:
- link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
descriptionTag: true
docker:
build: "-a amd64 -s linux -p temp -ew"
tagPrefixes:
- my.image.pub/my-app
- 其中的
dao
部分配置即本次将要执行的命令的配置,其中的link
为需要连接的数据库配置。descriptionTag
表示为生成的entity
代码文件增加字段描述到description
标签中,如果数据表的entity
对象被用到了接口api
定义中,该标签则可作为参数描述。我们需要将此link
配置改为我们的数据库连接地址。关于link
配置项的详细介绍请参考章节 ORM使用配置-配置文件。 - 其中
docker
配置项是模板默认提供的配置,用于镜像编译。这里不做详解,感兴趣可以参考开发手册中开发工具相关章节。
执行代码生成
将数据表创建好后,我们在项目根目录下执行make dao
自动生成对应的dao/do/entity
文件。
$ make dao
generated: /Users/john/Temp/demo/internal/dao/user.go
generated: /Users/john/Temp/demo/internal/dao/internal/user.go
generated: /Users/john/Temp/demo/internal/model/do/user.go
generated: /Users/john/Temp/demo/internal/model/entity/user.go
done!
提示
make
命令是在*nix
系统下默认提供的指令,包括Linux/MacOS
系统。如果是其他系统,例如Windows
,默认不支持make
命令,可以使用gf gen dao
命令来替换。
每张表将会生成三类Go
文件:
dao
:通过对象方式访问底层数据源,底层基于ORM
组件实现。do
:数据转换模型,用于业务模型到数据模型的转换,由工具维护,用户不能修改。工具每次生成代码文件将会覆盖该目录。entity
:数据模型,由工具维护,用户不能修改。工具每次生成代码文件将会覆盖该目录。
更详细的介绍请参考章节 数据规范-gen dao
信息
由脚手架工具生成的代码中,都会带有顶部文件注释。如果文件注释中带有Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
的注释描述,那么表示该文件是由脚手架工具维护,每一次代码生成都会覆盖它。
dao
生成的dao
文件有两个:
internal/dao/internal/user.go
用于封装对数据表user
的访问。该文件自动生成了一些数据结构和方法,简化对数据表的CURD
操作。该文件每次生成都会覆盖,由开发工具自动维护,开发者无需关心。internal/dao/user.go
其实是对internal/dao/internal/user.go
的进一步封装,用于供其他模块直接调用访问。该文件开发者可以随意修改,或者扩展dao
的能力。
由于生成的internal/dao/internal/user.go
文件完全由开发工具维护,那么我们只需关心internal/dao/user.go
这个生成的源码文件,后续如果有需要可以在这个文件上做功能扩展。
示例源码:https://github.com/gogf/quick-demo/blob/main/internal/dao/user.go
internal/dao/user.go
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package dao
import (
"demo/internal/dao/internal"
)
// internalUserDao is internal type for wrapping internal DAO implements.
type internalUserDao = *internal.UserDao
// userDao is the data access object for table user.
// You can define custom methods on it to extend its functionality as you wish.
type userDao struct {
internalUserDao
}
var (
// User is globally public accessible object for table user operations.
User = userDao{
internal.NewUserDao(),
}
)
// Fill with you ideas below.
do
示例源码:https://github.com/gogf/quick-demo/blob/main/internal/model/do/user.go
internal/model/do/user.go
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package do
import (
"github.com/gogf/gf/v2/frame/g"
)
// User is the golang structure of table user for DAO operations like Where/Data.
type User struct {
g.Meta `orm:"table:user, do:true"`
Id interface{} // user id
Name interface{} // user name
Status interface{} // user status
Age interface{} // user age
}
关于do
数据转换模型的使用,我们将在后续代码逻辑中做展示。
entity
示例源码:https://github.com/gogf/quick-demo/blob/main/internal/model/entity/user.go
internal/model/entity/user.go
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package entity
// User is the golang structure for table user.
type User struct {
Id uint `json:"id" orm:"id" description:"user id"` // user id
Name string `json:"name" orm:"name" description:"user name"` // user name
Status int `json:"status" orm:"status" description:"user status"` // user status
Age uint `json:"age" orm:"age" description:"user age"` // user age
}
可以看到该entity
数据结构定义与数据表字段一一对应。
学习小结
可以感受到,使用GoFrame
框架便捷的脚手架工具,我们从一些重复性的代码劳动中解放了出来,极大地提高了生产效率。针对数据库的操作将会变得非常简单。
在下一步,我们将设计CURD
接口,一起看看在GoFrame
框架中是如何快速定义接口的吧。