fwh_pro.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. import (
  3. "fwh-toolbox-server/config"
  4. "log"
  5. "gorm.io/driver/mysql"
  6. "gorm.io/gen"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/logger"
  9. )
  10. // Dynamic SQL
  11. // type Querier interface {
  12. // // SELECT * FROM @@table WHERE name = @name{{if role !=""}} AND role = @role{{end}}
  13. // FilterWithNameAndRole(name, role string) ([]gen.T, error)
  14. // }
  15. func main() {
  16. // 指定生成代码的具体相对目录(相对于当前文件),默认:./query
  17. // 默认生成需要使用WithContext之后才可以查询的代码,但可以通过设置gen.WithoutContext禁用该模式
  18. g := gen.NewGenerator(gen.Config{
  19. // 默认会在 OutPath 目录生成CRUD代码,并且同目录下生成 model 包
  20. // 所以OutPath最终package不能设置为model,在有数据库表同步的情况下会产生冲突
  21. // 若一定要使用,可以通过ModelPkgPath单独指定model package的名称
  22. OutPath: "./models/fwh_pro/query_fwh_pro",
  23. ModelPkgPath: "model_fwh_pro",
  24. // gen.WithoutContext: 禁用WithContext模式
  25. // gen.WithDefaultQuery: 生成一个全局Query对象Q
  26. // gen.WithQueryInterface: 生成Query接口
  27. Mode: gen.WithDefaultQuery | gen.WithQueryInterface, // generate mode
  28. })
  29. // 通常复用项目中已有的SQL连接配置db(*grom.DB)
  30. // 非必须,但如果需要复用连接是的gorm.Config或需要连接数据库同步表信息则必须设置
  31. // gormdb, _ := gorm.Open(mysql.Open("root:@(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local"))
  32. // g.UseDB(gormdb) // reuse your gorm db
  33. cfg, _ := config.LoadConfig()
  34. db, err := InitMySQL(cfg.MySQLDSN)
  35. if err != nil {
  36. log.Printf("Mysql Database Open Filed!\n%s\n", err.Error())
  37. return
  38. }
  39. g.UseDB(db)
  40. // 从连接的数据库为所有表生成Model结构体和CRUD代码
  41. // g.ApplyBasic(g.GenerateAllTable()...)
  42. // 也可以手动指定需要生成代码的数据表
  43. g.ApplyBasic(g.GenerateModel("iot_gateway", gen.FieldIgnore(
  44. "power_sun", // 太阳能发电功率
  45. "power_gen", // 发电机发电功率
  46. "power_uti", // 市电供电功率
  47. "power_fhp", // FHP 发电功率
  48. "power_load", // 负荷功率
  49. "battery_soc", // 电池 SOC
  50. "weather_county", // weather 天气 对应的县ID(zoneId)
  51. "weather_state", // weather 天气 对应的州(area)
  52. "gen_stat", // 发电机状态(0不使能 1停机 2启动 3运行 4退出 5故障)
  53. "main_sw", // 主开关状态(1,0,1 备电主开关 发电机主开关 光伏主开关 0-断开 1-闭合 数据来源201)
  54. ), gen.FieldGenType("ger_option", "Int8")))
  55. // Generate basic type-safe DAO API for struct `model.User` following conventions
  56. // g.ApplyBasic(model.User{})
  57. // Generate Type Safe API with Dynamic SQL defined on Querier interface for `model.User` and `model.Company`
  58. // g.ApplyInterface(func(Querier) {}, model.User{}, model.Company{})
  59. // Generate the code
  60. g.Execute()
  61. }
  62. func InitMySQL(dsn string) (*gorm.DB, error) {
  63. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  64. Logger: logger.Default.LogMode(logger.Info),
  65. })
  66. if err != nil {
  67. log.Printf("failed to connect to MySQL: %v", err)
  68. return nil, err
  69. }
  70. return db, nil
  71. }