{"id":19298667,"url":"https://github.com/ibbd-dev/go-db-models","last_synced_at":"2025-10-10T03:02:02.618Z","repository":{"id":117525192,"uuid":"68064648","full_name":"ibbd-dev/go-db-models","owner":"ibbd-dev","description":"Auto create models for database in golang. 自动创建数据库的模型。 ","archived":false,"fork":false,"pushed_at":"2016-12-21T03:20:12.000Z","size":31,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-24T01:15:32.479Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ibbd-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-13T02:00:13.000Z","updated_at":"2018-03-06T17:16:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"be0fa49a-aeb1-496f-a0c9-393792900c3a","html_url":"https://github.com/ibbd-dev/go-db-models","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ibbd-dev/go-db-models","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibbd-dev%2Fgo-db-models","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibbd-dev%2Fgo-db-models/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibbd-dev%2Fgo-db-models/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibbd-dev%2Fgo-db-models/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ibbd-dev","download_url":"https://codeload.github.com/ibbd-dev/go-db-models/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibbd-dev%2Fgo-db-models/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267505099,"owners_count":24098346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T23:08:45.004Z","updated_at":"2025-10-10T03:01:57.582Z","avatar_url":"https://github.com/ibbd-dev.png","language":"Go","readme":"# go-db-models\n\n根据配置参数自动创建所有数据表的struct结构，每个结构独立为一个文件。\n\n## 主要功能\n\n- [x] 生成表结构\n\n## INSTALL\n\n```sh\ngo get -u github.com/ibbd-dev/go-db-models\n```\n\n## USAGE\n\n```sh\n# 生成struct\ngo-db-models -h host -d database -u username -p password -n packageName {json-file.json}\n\n# 帮助\ngo-db-models\n```\n\n生成的文件:\n\n- 公共配置文件`common_gen_go`\n- 表结构及查询文件`*_tb_gen.go`, 主要包含以下几部分内容：\n  - 表结构定义\n  - 单行结果查询函数\n  - 根据某个字段查询单行记录的函数，例如根据id字段进行查询\n  - 多行结果查询函数\n  - 返回多行结果时，可以选择生成list（默认）或map格式\n- 单元测试文件`*_tb_gen_test.go`\n\n`*_tb_gen.go`文件样例如下：\n\n```go\n// DON'T EDIT *** generated by go-db-models *** DON'T EDIT //\npackage test\n\nimport \"strings\"\nimport \"database/sql\"\n\n// 对应数据表：ad_project\ntype AdProjectTable struct {\n\tId     uint32         `name:\"id\"`\n\tPlanId uint32         `name:\"plan_id\"`\n\tName   string         `name:\"name\"`\n\tStatus uint8          `name:\"status\"`\n\tRemark sql.NullString `name:\"remark\"`\n}\n\nconst adProjectSelectFields string = \"`id`,`plan_id`,`name`,`status`,`remark`\"\n\n// 查询单行记录（根据某个字段）\nfunc AdProjectQueryById(db *sql.DB, idVal uint32) (ad_project *AdProjectTable, err error) {\n\tqueryString := \"SELECT \" + adProjectSelectFields + \" FROM `ad_project` WHERE `id` = ?\"\n\tad_project = \u0026AdProjectTable{}\n\terr = db.QueryRow(queryString, idVal).Scan(\n\t\t\u0026ad_project.Id,\n\t\t\u0026ad_project.PlanId,\n\t\t\u0026ad_project.Name,\n\t\t\u0026ad_project.Status,\n\t\t\u0026ad_project.Remark,\n\t)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn ad_project, nil\n}\n\n// 查询单行记录\nfunc AdProjectQueryRow(db *sql.DB, queryString string) (ad_project *AdProjectTable, err error) {\n\tqueryString = strings.Replace(queryString, SelectFieldsTemp, adProjectSelectFields, 1)\n\tad_project = \u0026AdProjectTable{}\n\terr = db.QueryRow(queryString).Scan(\n\t\t\u0026ad_project.Id,\n\t\t\u0026ad_project.PlanId,\n\t\t\u0026ad_project.Name,\n\t\t\u0026ad_project.Status,\n\t\t\u0026ad_project.Remark,\n\t)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn ad_project, nil\n}\n\n// 查询多行记录\nfunc AdProjectQuery(db *sql.DB, queryString string) (ad_project []*AdProjectTable, err error) {\n\tqueryString = strings.Replace(queryString, SelectFieldsTemp, adProjectSelectFields, 1)\n\trows, err := db.Query(queryString)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rows.Close()\n\n\tfor rows.Next() {\n\t\tvar oneRow = \u0026AdProjectTable{}\n\t\terr = rows.Scan(\n\t\t\t\u0026oneRow.Id,\n\t\t\t\u0026oneRow.PlanId,\n\t\t\t\u0026oneRow.Name,\n\t\t\t\u0026oneRow.Status,\n\t\t\t\u0026oneRow.Remark,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tad_project = append(ad_project, oneRow)\n\t}\n\n\treturn ad_project, nil\n}\n```\n\n## 生成单元测试文档\n\n在生成相应的结构和查询函数的同时，也会生成相应的单元测试文件，单元测试文件的文件名如`*_tb_gen_test.go`，连接数据库时，使用了一个`testGetDb`的函数，需要在外部自己实现，如`vim init_test.go`:\n\n```go\npackage models\n\nimport (\n\t\"database/sql\"\n\t\"fmt\"\n\t_ \"github.com/go-sql-driver/mysql\"\n)\n\nconst (\n\ttestHost     string = \"dsp-dev-go\"\n\ttestDB       string = \"dsp_sys\"\n\ttestUser     string = \"dsp_sys\"\n\ttestPassword string = \"Dsp_sys-pwd\"\n\ttestPort     int    = 3306\n)\n\n// 获取数据库连接\n// 单元测试文件会调用该方法获得数据库链接\nfunc testGetDb() *sql.DB {\n\t// Open database connection\n\tconn_string := fmt.Sprintf(\"%s:%s@tcp(%s:%d)/%s\", testUser, testPassword, testHost, testPort, testDB)\n\n\tdb, err := sql.Open(\"mysql\", conn_string)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn db\n}\n```\n\n## Json数据表定义文件\n\n如果只是希望生成部分的数据表，则可以使用该文件。该文件的结构如：\n\n```json\n{\n    // 需要生成的数据表\n    \"tables\": [\n        {\n            // 数据表的名字\n            \"name\": \"ad_plan\",\n            // 需要生成的字段\n            \"fields\": [\"id\", \"name\", \"status\", \"daily_budget\", \"start_date\", \"created_at\"],\n            // [可选]这是可选项，如果定义了该字段，则会自动生成一个类似QueryById的查询函数。\n            \"queryBy\": \"id\",\n            // [可选]返回多行数据时，默认返回格式是list，但是可以通过指定该字段，来返回map结构，其下标就是对应的字段的值。\n            // 该字段通常是主键或者唯一索引的字段，否则就可能出现重复值\n            \"mapIndex\": \"id\",\n            // [可选]结构体增加注释\n            \"msg\": \"这是注释。。。\"\n        },\n        {\n            \"name\": \"ad_project\",\n            \"fields\": [\"id\", \"plan_id\", \"name\", \"status\", \"remark\"]\n        }\n    ]\n}\n```\n\n## TODO\n\n- 查询缓存\n- 连表查询\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibbd-dev%2Fgo-db-models","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibbd-dev%2Fgo-db-models","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibbd-dev%2Fgo-db-models/lists"}