main.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. import (
  3. "fmt"
  4. "gorm.io/driver/mysql"
  5. "gorm.io/gen"
  6. "gorm.io/gorm"
  7. "gorm.io/gorm/logger"
  8. "strings"
  9. )
  10. type Config struct {
  11. DbAddr string `json:"dbAddr,omitempty"`
  12. DbSchema string `json:"dbSchema,omitempty"`
  13. DbUser string `json:"dbUser,omitempty"`
  14. DbPwd string `json:"dbPwd,omitempty"`
  15. }
  16. func main() {
  17. fmt.Println("db2code started ....")
  18. defer fmt.Println("db2code stopped ....")
  19. cfg := &Config{
  20. DbAddr: "158.8.12.102:3308",
  21. DbSchema: "ticket-cloud",
  22. DbUser: "root",
  23. DbPwd: "ticket@2025",
  24. }
  25. db := initDb(cfg)
  26. genStructs(db)
  27. }
  28. func initDb(cfg *Config) *gorm.DB {
  29. if cfg == nil {
  30. panic("can not init db wih nil config")
  31. }
  32. dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
  33. cfg.DbUser,
  34. cfg.DbPwd,
  35. cfg.DbAddr,
  36. cfg.DbSchema)
  37. if db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  38. Logger: logger.Default.LogMode(logger.Info),
  39. }); err != nil {
  40. panic(fmt.Sprintf("try connect to db fail, dsn: '%s', error info: %v",
  41. dsn, err))
  42. } else {
  43. return db
  44. }
  45. }
  46. func genStructs(db *gorm.DB) {
  47. g := gen.NewGenerator(gen.Config{
  48. OutPath: "po",
  49. WithUnitTest: false,
  50. FieldNullable: true,
  51. FieldCoverable: true,
  52. FieldSignable: false,
  53. FieldWithIndexTag: true,
  54. FieldWithTypeTag: true,
  55. Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
  56. })
  57. g.WithDataTypeMap(map[string]func(columnType gorm.ColumnType) (dataType string){
  58. "tinyint": func(filedType gorm.ColumnType) string {
  59. if ct, ok := filedType.ColumnType(); ok {
  60. if strings.HasPrefix(strings.ToLower(ct), "tinyint(1)") {
  61. return "int8"
  62. }
  63. return "int16"
  64. } else {
  65. return "int32"
  66. }
  67. },
  68. })
  69. g.UseDB(db)
  70. g.GenerateAllTable()
  71. g.Execute()
  72. }