/templates/portal/app/models/base.db.go

https://github.com/liujianping/scaffold · Go · 65 lines · 56 code · 9 blank · 0 comment · 11 complexity · e8c6e3ac6cf3d43d153ac8ab62c1dfca MD5 · raw file

  1. package models
  2. import (
  3. "reflect"
  4. "github.com/jinzhu/gorm"
  5. _ "github.com/jinzhu/gorm/dialects/mssql"
  6. _ "github.com/jinzhu/gorm/dialects/mysql"
  7. _ "github.com/jinzhu/gorm/dialects/postgres"
  8. _ "github.com/jinzhu/gorm/dialects/sqlite"
  9. )
  10. const (
  11. DefaultPageSize = 20
  12. DefaultMaxIdleConnections = 10
  13. DefaultMaxOpenConnections = 128
  14. )
  15. func DB(driver, dsn string) (*gorm.DB, error) {
  16. db, err := gorm.Open(driver, dsn)
  17. if err != nil {
  18. return nil, err
  19. }
  20. db.DB().SetMaxOpenConns(DefaultMaxOpenConnections)
  21. db.DB().SetMaxIdleConns(DefaultMaxIdleConnections)
  22. return db, nil
  23. }
  24. func Columns(obj interface{}) []string {
  25. var columns []string
  26. t := reflect.TypeOf(obj)
  27. for i := 0; i < t.NumField(); i++ {
  28. field := t.Field(i)
  29. if field.Tag.Get("db") != "" && field.Tag.Get("db") != "-" {
  30. columns = append(columns, field.Tag.Get("db"))
  31. }
  32. }
  33. return columns
  34. }
  35. func TableObject(db *gorm.DB, table string, id int64) interface{} {
  36. switch table {
  37. [[range .tables]]
  38. case "[[.Name]]":
  39. var obj [[.Name | class]]
  40. if err := db.Find(&obj, id).Error; err != nil {
  41. return nil
  42. }
  43. return obj
  44. [[end]]
  45. }
  46. return nil
  47. }
  48. func DefaultTableObject(table string) interface{} {
  49. switch table {
  50. [[range .tables]]
  51. case "[[.Name]]":
  52. return Default[[.Name | class]]
  53. [[end]]
  54. }
  55. return nil
  56. }