因為專案轉go,覺得寫model和json很重複,所以簡單寫了個工具類
專案全域性
先定義資料庫類和資料庫鏈結
gorm的資料庫鏈結package conf
// model儲存路徑
const modelpath = "./models/"
// json儲存路徑
const jsonpath = "./reply/"
type dbconf struct
// 資料庫鏈結配置
var masterdbconfig dbconf = dbconf
專案下建立兩個資料夾,models和replypackage db
import (
"cn.saas/charge-***/conf"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)var instance *gorm.db
func init() )
if err != nil
}
定義查詢語句的model類
package generate
type field struct
最後就是生成方法了package generate
type table struct
} tables := gettables(tablenamesstr) //生成所有表資訊
ch := make(chan int)
for _, table := range tables
fmt.println(
}//獲取表資訊
func gettables(tablenames string) table
return tables
}//獲取所有字段資訊
func getfields(tablename string) field
//生成model
func generatemodel(table table, fields field)
content += "type " + generator.camelcase(table.name) + " struct
content += "}\n"
content += "func (entity *" + generator.camelcase(table.name) + ") tablename() string "
filename := conf.modelpath + table.name + ".go"
var f *os.file
var err error
if checkfilei***ist(filename)
} f, err = os.create(filename)
if err != nil
defer f.close()
_, err = io.writestring(f, content)
if err != nil else
}//獲取字段型別
func getfiledtype(field field) string else
case "integer":
if typearr1[1] == " unsigned" else
case "mediumint":
if typearr1[1] == " unsigned" else
case "bit":
if typearr1[1] == " unsigned" else
case "year":
if typearr1[1] == " unsigned" else
case "smallint":
if typearr1[1] == " unsigned" else
case "tinyint":
if typearr1[1] == " unsigned" else
case "bigint":
if typearr1[1] == " unsigned" else
case "decimal":
return "*float64"
case "double":
return "*float32"
case "float":
return "*float32"
case "real":
return "*float32"
case "numeric":
return "*float32"
case "timestamp":
return "*time.time"
case "datetime":
return "*jsontime.jsontime"
case "time":
return "*time.time"
case "date":
return "*time.time"
default:
return "*string" }}
//獲取欄位json描述
func getfieldjson(field field) string
// 首字母小寫
func lcfirst(str string) string
return ""
}//獲取欄位gorm描述
func getfieldgorm(field field) string
if field.key == "uni"
if field.extra == "auto_increment"
if field.null == "no"
return fieldcontext + `"`
}//獲取字段說明
func getfieldcomment(field field) string
return ""
}//檢查檔案是否存在
func checkfilei***ist(filename string) bool
return exist
}//生成json
func generatejson(table table, fields field, ch chan int)
content += "}\n"
filename := conf.jsonpath + table.name + "_reply.go"
if checkfilei***ist(filename)
f, err := os.create(filename)
if err != nil
_, err = io.writestring(f, content)
if err != nil else
defer f.close()
ch close(ch)
}寫的比較粗俗簡單,生成那裡用到通道,是因為用了go協程,防止main方法先跑完導致生成不完全
如果想加快,可以把switchcase那裡改造成map也會更快
不過就只在本地跑就無所謂了
最後是main方法
func main()
把go.mod我也放上來
直接go mod download即可
逆向工程生成的Example類的使用
二.example類的使用 example類的成員 公升序還是降序 欄位 空格 asc desc protected string orderbyclause 去除重複 true是選擇不重覆記錄,false,反之 protected boolean distinct 自定義查詢條件 protecte...
Django 模型(model)類的查詢集和過濾器
在控制器上呼叫方法返回查詢集 queryset 查詢經過過濾器篩選後返回新的查詢集,所以可以寫成鏈式呼叫。queryset支援鏈式查詢 author.objects.filter name contains weizhongtu filter email tuweizhong 163.com aut...
IDEA 生成類注釋和方法注釋
目錄 二 生成類注釋 02 三 兩種類注釋生成的區別 四 生成方法注釋 classname j a author 建立人名稱 version 1.0.0 description todo createtime 年 月 日 依次開啟file settings editor file and code ...