Skip to content

Commit 82ec41e

Browse files
authored
Merge pull request #20 from go-cinch/main
[feat]add gorm gen doc
2 parents 85c023d + 5c05d67 commit 82ec41e

File tree

4 files changed

+126
-13
lines changed

4 files changed

+126
-13
lines changed

_sidebar.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- [配置](base/0.config.md)
1616
- [日志](base/1.log.md)
1717
- [数据库](base/2.db.md)
18+
- [gorm/gen数据库映射](base/9.gorm.gen.md)
1819
- [缓存](base/3.cache.md)
1920
- [Make命令](base/4.make.md)
2021
- [错误管理](base/5.reason.md)

base/9.gorm.gen.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# Gorm Gen数据库映射
2+
3+
项目内置gorm/gen, 数据库映射到struct, 通过工具自动生成.
4+
5+
## 修改配置
6+
7+
### dsn
8+
9+
数据库连接地址.
10+
11+
### tables
12+
13+
需要生成的表集合.
14+
15+
### exclude
16+
17+
不需要生成的表集合.
18+
19+
### association
20+
21+
关联关系.
22+
23+
一般是5个字段, 通过`|`分隔, `当前表名`|`关联表名`|`结构体名称`|`关系(has_one/has_many/belongs_to/many_to_many)`|`外键`
24+
25+
!> belongs_to不常用, 具体用法参考gorm/gen官方文档
26+
27+
#### 一对一
28+
29+
示例, `一个用户一个角色`:
30+
31+
```yml
32+
gen:
33+
association:
34+
- 'user|role|Role|has_one|foreignKey:RoleID'
35+
```
36+
37+
#### 一对多
38+
39+
示例, `一个问题多个选项`:
40+
41+
```yml
42+
gen:
43+
association:
44+
- 'question|option|[]Options|has_many|foreignKey:QuestionID'
45+
```
46+
47+
#### 多对多
48+
49+
示例, `一个用户组可能有多个用户, 一个用户可能存在多个用户组`:
50+
51+
```yml
52+
gen:
53+
association:
54+
- 'user_group|user|[]Users|many_to_many|many2many:user_user_group_relation'
55+
- 'user|user_group|[]UserGroups|many_to_many|many2many:user_user_group_relation'
56+
```
57+
58+
#### 特别
59+
60+
将字段映射为指针类型:
61+
62+
`表名`|`指针符号+字段1,指针符号+字段2,...`
63+
64+
```yml
65+
gen:
66+
association:
67+
- 'user|*Name,*Role'
68+
```
69+
70+
### field-with-string-tag
71+
72+
将字段json增加string后缀:
73+
74+
`表名`|`字段1,字段2,...`
75+
76+
```yml
77+
gen:
78+
field-with-string-tag:
79+
- 'user|id,role_id'
80+
```
81+
82+
生成的结构体, json tag会像这样:
83+
84+
```go
85+
type User struct {
86+
ID uint64 `json:"id,string"`
87+
RoleID uint64 `json:"roleId,string"`
88+
}
89+
```
90+
91+
?> 这个功能主要是解决uint64在前端js会溢出, 通过映射为string来作为前端类型
92+
93+
## 生成映射
94+
95+
```bash
96+
cinch gen gorm
97+
# 🍺 Generate gorm succeeded
98+
# model path internal/data/query
99+
# query path internal/data/model
100+
```
101+
102+
data目录下会新增两个目录, 其中内容包含model和query, 基于gorm/gen自动生成
103+
104+
!> 不允许修改或新增model和query中的任何文件, 被覆盖后果自负
105+
106+
## 源码
107+
108+
参见[cinch/gorm](https://github.com/go-cinch/cinch/blob/dev/cmd/cinch/internal/gen/gorm/gorm.go), 有任何问题或者新需求, 欢迎提issue或pr~

started/0.init.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ git submodule add -b master --name api/game-proto https://github.com/go-cinch/ga
136136
# sudo apt install -y make
137137
make init
138138

139-
# 5. 编译项目
139+
# 5. 做启动前的所有检查
140140
make all
141141
```
142142

@@ -171,23 +171,23 @@ cinch run
171171
```bash
172172
# 启动auth
173173
# 如果你用的是compose/single
174-
export AUTH_DATA_DATABASE_DSN='root:mysqlrootpwd@tcp(127.0.0.1:3306)/auth?parseTime=True'
175-
export AUTH_DATA_REDIS_DSN='redis://:[email protected]:6379/0'
174+
export SERVICE_DATA_DATABASE_DSN='root:mysqlrootpwd@tcp(127.0.0.1:3306)/auth?parseTime=True'
175+
export SERVICE_DATA_REDIS_DSN='redis://:[email protected]:6379/0'
176176
# 其他按需修改
177-
export AUTH_DATA_DATABASE_DSN='root:root@tcp(127.0.0.1:3306)/auth?parseTime=True'
178-
export AUTH_DATA_REDIS_DSN='redis://127.0.0.1:6379/0'
177+
export SERVICE_DATA_DATABASE_DSN='root:root@tcp(127.0.0.1:3306)/auth?parseTime=True'
178+
export SERVICE_DATA_REDIS_DSN='redis://127.0.0.1:6379/0'
179179
cd auth
180180
cinch run
181181

182182
# 启动game
183183
# 如果你用的是compose/single
184-
export GAME_DATA_DATABASE_DSN='root:mysqlrootpwd@tcp(127.0.0.1:3306)/game?parseTime=True'
185-
export GAME_DATA_REDIS_DSN='redis://:[email protected]:6379/0'
184+
export SERVICE_DATA_DATABASE_DSN='root:mysqlrootpwd@tcp(127.0.0.1:3306)/game?parseTime=True'
185+
export SERVICE_DATA_REDIS_DSN='redis://:[email protected]:6379/0'
186186
# 其他按需修改
187-
export GAME_DATA_DATABASE_DSN='root:root@tcp(127.0.0.1:3306)/game?parseTime=True'
188-
export GAME_DATA_REDIS_DSN='redis://127.0.0.1:6379/0'
187+
export SERVICE_DATA_DATABASE_DSN='root:root@tcp(127.0.0.1:3306)/game?parseTime=True'
188+
export SERVICE_DATA_REDIS_DSN='redis://127.0.0.1:6379/0'
189189
# 设置auth服务
190-
export GAME_CLIENT_AUTH='127.0.0.1:6160'
190+
export SERVICE_CLIENT_AUTH='127.0.0.1:6160'
191191
cd game
192192
cinch run
193193
```
@@ -208,7 +208,7 @@ curl http://127.0.0.1:6060/idempotent
208208
game服务:
209209

210210
```bash
211-
curl http://127.0.0.1:8080/hello/world
211+
curl http://127.0.0.1:8080/game/list
212212
# 输出如下说明服务通了只是没有权限, 出现其他说明配置有误
213213
# {"code":401, "reason":"UNAUTHORIZED", "message":"token is missing", "metadata":{}}
214214
```

started/1.first-api.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ cinch gen proto -a player
99
# 🍺 Generate proto file success: api/game-proto/game.proto
1010
```
1111

12+
!> 示例中已经存在game, 直接复制改为player即可, 这里主要是演示快速生成proto
13+
1214
## 创建数据库
1315

1416
### 生成sql文件
@@ -37,7 +39,7 @@ cinch gen migrate up
3739

3840
!> 在运行之前先清空数据库, 否则数据不一致导致生成失败
3941

40-
### gorm反向生成data
42+
### 生成数据库映射
4143

4244
```bash
4345
cinch gen gorm
@@ -49,6 +51,8 @@ cinch gen gorm
4951
!> 建议保存gorm关系到`configs/gen.yml`, 如复杂的关联关系,
5052
示例[`auth/configs/gen.yml`](https://github.com/go-cinch/auth/blob/v1.0.3/configs/gen.yml)
5153

54+
?> 参见[gorm/gen数据库映射](/base/9.gorm.gen.md)
55+
5256
### 生成CRUD
5357

5458
基本包生成
@@ -104,7 +108,7 @@ func NewGameService(task *task.Task, game *biz.GameUseCase, player *biz.PlayerUs
104108
}
105109
```
106110

107-
## 编译
111+
## 启动前检查
108112

109113
```bash
110114
make all

0 commit comments

Comments
 (0)