{"id":41143030,"url":"https://github.com/folospace/go-mysql-orm","last_synced_at":"2026-01-22T18:52:12.647Z","repository":{"id":37326939,"uuid":"443224801","full_name":"folospace/go-mysql-orm","owner":"folospace","description":"Dedicated to the most easy use of mysql","archived":false,"fork":false,"pushed_at":"2025-08-09T02:46:21.000Z","size":223,"stargazers_count":159,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-22T17:09:51.067Z","etag":null,"topics":["go-orm","golang","mysql-orm"],"latest_commit_sha":null,"homepage":"","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/folospace.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,"zenodo":null}},"created_at":"2021-12-31T01:36:14.000Z","updated_at":"2025-10-11T05:38:34.000Z","dependencies_parsed_at":"2023-09-26T08:48:09.711Z","dependency_job_id":"4f753328-38c0-4835-87d6-406acf73c11f","html_url":"https://github.com/folospace/go-mysql-orm","commit_stats":null,"previous_names":[],"tags_count":60,"template":false,"template_full_name":null,"purl":"pkg:github/folospace/go-mysql-orm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folospace%2Fgo-mysql-orm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folospace%2Fgo-mysql-orm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folospace%2Fgo-mysql-orm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folospace%2Fgo-mysql-orm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/folospace","download_url":"https://codeload.github.com/folospace/go-mysql-orm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folospace%2Fgo-mysql-orm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28668550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T17:07:18.858Z","status":"ssl_error","status_checked_at":"2026-01-22T17:05:02.040Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["go-orm","golang","mysql-orm"],"created_at":"2026-01-22T18:52:12.115Z","updated_at":"2026-01-22T18:52:12.636Z","avatar_url":"https://github.com/folospace.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Base on [go-sql-driver/mysql](https://github.com/go-sql-driver/mysql).\n\n## Get Started\n```go\nimport (\n    \"database/sql\"\n    \"github.com/folospace/go-mysql-orm/orm\"\n)\n\n//connect mysql db\nvar db, _ = orm.OpenMysql(\"user:password@tcp(127.0.0.1:3306)/mydb?parseTime=true\u0026charset=utf8mb4\u0026loc=Asia%2FShanghai\")\n\n//user table\nvar UserTable = new(User)\n\ntype User struct {\n    Id        int       `json:\"id\"`\n    Email     string    `json:\"email\" orm:\"email,unique\"`\n    Name      string    `json:\"name\" default:\"jack\"`\n    Avatar    string    `json:\"avatar\" comment:\"head image\"`\n    CreatedAt time.Time `json:\"created_at\"`\n    UpdatedAt time.Time `json:\"updated_at\"`\n}\n\nfunc (*User) Connections() []*sql.DB {\n    return []*sql.DB{db}\n}\nfunc (*User) DatabaseName() string {\n    return \"mydb\"\n}\nfunc (*User) TableName() string {\n    return \"user\"\n}\nfunc (u *User) Query() *orm.Query[*User] {\n    return orm.NewQuery(UserTable).WherePrimaryIfNotZero(u.Id)\n}\n\nfunc main() {\n    //create db table, add new columns if table already exist.\n    UserTable.Query().CreateTable()  \n    \n    //create struct from db table\n    UserTable.Query().CreateStruct()\n}\n```\n\n## select\n\n```go\n    //select * from user where id = 1 //to struct\n    user, _ := UserTable.Query().Get(1)\n    fmt.Println(user) //User{Id:1}\n\n    //select * from user where name='john' //to struct slice\n    users, _ := UserTable.Query().Where(\u0026UserTable.Name, \"john\").Gets()\n    fmt.Println(users) //User{Id:1}, User{Id:2}, ...\n    \n    //select email from user //to slice\n    emails, _ := UserTable.Query().Select(\u0026UserTable.Email).Limit(10).GetSliceString()\n    fmt.Println(emails) //a**@gmail.com, b**@gmail.com, ...\n    \n    //select user info to slice, group by id\n    var userInfoMap map[int][]string\n    UserTable.Query().Select(\u0026UserTable.Id, \u0026UserTable.Email, \u0026UserTable.Name).Limit(10).GetTo(\u0026userInfoMap)\n    fmt.Println(userInfoMap) //{1:[a**@gmail.com, a**], 2:[b**@gmail.com, b**], ...}\n    \n    //select user id to slice, group by name\n    var sameNameUsers map[string][]int\n    UserTable.Query().Select(\u0026UserTable.Name, \u0026UserTable.Id).Limit(10).GetTo(\u0026sameNameUsers)\n    fmt.Println(sameNameUsers) //{a**:[1,3], b**:[2,4], ...}\n    \n```\n\n## update | delete | insert\n\n```go\n    //update user set name=\"john 2\" where id = 1\n    UserTable.Query().WherePrimary(1).Update(\u0026UserTable.Name, \"john 2\")\n    \n    //delete\n    UserTable.Query().Delete(1, 2, 3)\n    \n    //insert\n    UserTable.Query().Insert(\u0026User{Name: \"han\"})   \n    \n    //update users with different names\n    _ = UserTable.Query().OnConflictUpdate(\u0026UserTable.Name, \u0026UserTable.Name).\n    Insert(\u0026User{Id: 1, Name: \"han\"}, \u0026User{Id: 2, Name: \"join\"})\n```\n\n### join\n\n```go\n    //query join \n    UserTable.Query().Join(OrderTable, func (join *orm.Query[*User]) *orm.Query[*User] {\n            return join.Where(\u0026UserTable.Id, \u0026OrderTable.UserId)\n    }).Select(UserTable).Gets()\n```\n\n## transaction\n\n```go\n    //transaction\n    _ = UserTable.Query().Transaction(func (query *orm.Query[*User]) error {\n        newId := query.Insert(\u0026User{Name: \"john\"}).LastInsertId //insert\n        //newId := orm.NewQuery(UserTable).UseTx(query.Tx()).Insert(\u0026User{Name: \"john\"}).LastInsertId\n        fmt.Println(newId)\n        return errors.New(\"I want rollback\") //rollback\n    })\n```\n\n## subquery\n\n```go\n    //subquery\n    subquery := UserTable.Query().WherePrimary(1).Select(\u0026UserTable.Id).SubQuery()\n    \n    //where in suquery\n    UserTable.Query().Where(\u0026UserTable.Id, orm.WhereIn, subquery).Gets()\n    \n    //insert subquery\n    UserTable.Query().Select(\u0026UserTable.Id).InsertSubquery(subquery)\n    \n    //join subquery\n    UserTable.Query().Join(subquery, func (query *orm.Query[*User]) *orm.Query[*User] {\n        return query.Where(\u0026UserTable.Id, orm.Raw(\"sub.id\"))\n    }).Gets()\n    \n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolospace%2Fgo-mysql-orm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffolospace%2Fgo-mysql-orm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolospace%2Fgo-mysql-orm/lists"}