main.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. When using xorm, you can create multiple orm engines, an engine means a database.
  3. */
  4. package main
  5. import (
  6. // Core.
  7. "fmt"
  8. "os"
  9. // SQLite 3
  10. _ "github.com/mattn/go-sqlite3"
  11. // MySQL. Use either driver.
  12. // _ "github.com/go-sql-driver/mysql"
  13. // _ "github.com/ziutek/mymysql"
  14. // PostgreSQL
  15. // _ "github.com/lib/pq"
  16. // SQL Server
  17. // _ "github.com/lunny/godbc"
  18. // XORM.
  19. "github.com/go-xorm/xorm"
  20. // Others.
  21. // "github.com/davecgh/go-spew/spew"
  22. "github.com/go-xorm/core"
  23. )
  24. func check(err error) {
  25. if err != nil {
  26. fmt.Println(err.Error())
  27. os.Exit(1)
  28. }
  29. }
  30. func NewOrm() *xorm.Engine {
  31. // NewEngine parameters are those of the SQL driver: driver and DSN.
  32. engine, err := xorm.NewEngine("sqlite3", "./test.db")
  33. check(err)
  34. fmt.Println("ORM loaded")
  35. return engine
  36. }
  37. func setupLogging(engine *xorm.Engine) {
  38. // Enable built-in Logging features.
  39. engine.ShowSQL = true
  40. engine.ShowDebug = true
  41. engine.ShowErr = true
  42. engine.ShowWarn = true
  43. // Optional: declare a custom logger.
  44. f, err := os.Create("sql.log")
  45. check(err)
  46. engine.SetLogger(xorm.NewSimpleLogger(f))
  47. }
  48. func setupConnections(engine *xorm.Engine) {
  49. // Optional: limit connections.
  50. const CONNECTION_LIMIT = 4
  51. engine.SetMaxOpenConns(CONNECTION_LIMIT)
  52. // The number of idle connections is bound by the number of open ones.
  53. engine.SetMaxIdleConns(CONNECTION_LIMIT)
  54. }
  55. func setupMapping(engine *xorm.Engine) {
  56. same := core.SameMapper{}
  57. gonic := core.GonicMapper{}
  58. snake := core.SnakeMapper{}
  59. // Global mapping. Default is snake.
  60. engine.SetMapper(same)
  61. // Table-specific mapping.
  62. engine.SetTableMapper(gonic)
  63. // Column-specific mapping.
  64. engine.SetColumnMapper(snake)
  65. }
  66. func main() {
  67. var engine *xorm.Engine = NewOrm()
  68. setupLogging(engine)
  69. setupConnections(engine)
  70. setupMapping(engine)
  71. // Not needed: called automatically on exit.
  72. engine.Close()
  73. fmt.Println("ORM closed")
  74. }