/models/ToolsModel.go

https://github.com/3xxx/engineercms · Go · 94 lines · 1 code · 11 blank · 82 comment · 0 complexity · c2831ad3d76644f40212db88ca3e2a84 MD5 · raw file

  1. // //定义一个工具包,用来管理gorm数据库连接池的初始化工作。
  2. package models
  3. // import (
  4. // // "github.com/astaxie/beego/orm"
  5. // "fmt"
  6. // "github.com/astaxie/beego"
  7. // "github.com/jinzhu/gorm"
  8. // // _ "github.com/jinzhu/gorm/dialects/sqlite"
  9. // )
  10. // //定义全局的db对象,我们执行数据库操作主要通过他实现。
  11. // var _db *gorm.DB
  12. // //包初始化函数,golang特性,每个包初始化的时候会自动执行init函数,这里用来初始化gorm。
  13. // func init() {
  14. // // ...忽略dsn配置,请参考上面例子...
  15. // //配置MySQL连接参数
  16. // // username := "root" //账号
  17. // // password := "123456" //密码
  18. // // host := "127.0.0.1" //数据库地址,可以是Ip或者域名
  19. // // port := 3306 //数据库端口
  20. // // Dbname := "tizi365" //数据库名
  21. // // timeout := "10s" //连接超时,10秒
  22. // //拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
  23. // // dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
  24. // //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
  25. // // db, err := gorm.Open("mysql", dsn)
  26. // // if err != nil {
  27. // // panic("连接数据库失败, error=" + err.Error())
  28. // // }
  29. // var err error
  30. // var dns string
  31. // db_type := beego.AppConfig.String("db_type")
  32. // db_name := beego.AppConfig.String("db_name")
  33. // db_path := beego.AppConfig.String("db_path")
  34. // if db_path == "" {
  35. // db_path = "./"
  36. // }
  37. // dns = fmt.Sprintf("%s%s.db", db_path, db_name)
  38. // _db, err = gorm.Open(db_type, dns)
  39. // // _db.LogMode(true)
  40. // if err != nil {
  41. // panic("连接数据库失败, error=" + err.Error())
  42. // }
  43. // // defer gdb.Close()
  44. // //禁止表名复数形式
  45. // _db.SingularTable(true)
  46. // //延时关闭数据库连接
  47. // // defer db.Close()
  48. // //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
  49. // // _db, err := gorm.Open("mysql", dsn)
  50. // // if err != nil {
  51. // // panic("连接数据库失败, error=" + err.Error())
  52. // // }
  53. // // 开发的时候需要打开调试日志
  54. // _db.LogMode(true)
  55. // //设置数据库连接池参数
  56. // _db.DB().SetMaxOpenConns(100) //设置数据库连接池最大连接数
  57. // _db.DB().SetMaxIdleConns(20) //连接池最大允许的空闲连接数,如果没有sql任务需要执行的连接数大于20,超过的连接会被连接池关闭。
  58. // }
  59. // //获取gorm db对象,其他包需要执行数据库查询的时候,只要通过tools.getDB()获取db对象即可。
  60. // //不用担心协程并发使用同样的db对象会共用同一个连接,
  61. // // db对象在调用他的方法的时候会从数据库连接池中获取新的连接
  62. // // 注意:使用连接池技术后,千万不要使用完db后调用db.Close关闭数据库连接,
  63. // // 这样会导致整个数据库连接池关闭,导致连接池没有可用的连接
  64. // func GetDB() *gorm.DB {
  65. // return _db
  66. // }
  67. // // func GetDB() *gorm.DB {
  68. // // var err error
  69. // // var dns string
  70. // // db_type := beego.AppConfig.String("db_type")
  71. // // db_name := beego.AppConfig.String("db_name")
  72. // // db_path := beego.AppConfig.String("db_path")
  73. // // if db_path == "" {
  74. // // db_path = "./"
  75. // // }
  76. // // dns = fmt.Sprintf("%s%s.db", db_path, db_name)
  77. // // gdb, err = gorm.Open(db_type, dns)
  78. // // gdb.LogMode(true)
  79. // // if err != nil {
  80. // // panic("failed to connect database")
  81. // // }
  82. // // defer gdb.Close()
  83. // // }