You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

doc.go 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. // Copyright 2013 - 2016 The XORM Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD
  3. // license that can be found in the LICENSE file.
  4. /*
  5. Package xorm is a simple and powerful ORM for Go.
  6. Installation
  7. Make sure you have installed Go 1.11+ and then:
  8. go get xorm.io/xorm
  9. Create Engine
  10. Firstly, we should create an engine for a database
  11. engine, err := xorm.NewEngine(driverName, dataSourceName)
  12. Method NewEngine's parameters are the same as sql.Open which depend drivers' implementation.
  13. Generally, one engine for an application is enough. You can define it as a package variable.
  14. Raw Methods
  15. XORM supports raw SQL execution:
  16. 1. query with a SQL string, the returned results is []map[string][]byte
  17. results, err := engine.Query("select * from user")
  18. 2. query with a SQL string, the returned results is []map[string]string
  19. results, err := engine.QueryString("select * from user")
  20. 3. query with a SQL string, the returned results is []map[string]interface{}
  21. results, err := engine.QueryInterface("select * from user")
  22. 4. execute with a SQL string, the returned results
  23. affected, err := engine.Exec("update user set .... where ...")
  24. ORM Methods
  25. There are 8 major ORM methods and many helpful methods to use to operate database.
  26. 1. Insert one or multiple records to database
  27. affected, err := engine.Insert(&struct)
  28. // INSERT INTO struct () values ()
  29. affected, err := engine.Insert(&struct1, &struct2)
  30. // INSERT INTO struct1 () values ()
  31. // INSERT INTO struct2 () values ()
  32. affected, err := engine.Insert(&sliceOfStruct)
  33. // INSERT INTO struct () values (),(),()
  34. affected, err := engine.Insert(&struct1, &sliceOfStruct2)
  35. // INSERT INTO struct1 () values ()
  36. // INSERT INTO struct2 () values (),(),()
  37. 2. Query one record or one variable from database
  38. has, err := engine.Get(&user)
  39. // SELECT * FROM user LIMIT 1
  40. var id int64
  41. has, err := engine.Table("user").Where("name = ?", name).Get(&id)
  42. // SELECT id FROM user WHERE name = ? LIMIT 1
  43. 3. Query multiple records from database
  44. var sliceOfStructs []Struct
  45. err := engine.Find(&sliceOfStructs)
  46. // SELECT * FROM user
  47. var mapOfStructs = make(map[int64]Struct)
  48. err := engine.Find(&mapOfStructs)
  49. // SELECT * FROM user
  50. var int64s []int64
  51. err := engine.Table("user").Cols("id").Find(&int64s)
  52. // SELECT id FROM user
  53. 4. Query multiple records and record by record handle, there two methods, one is Iterate,
  54. another is Rows
  55. err := engine.Iterate(new(User), func(i int, bean interface{}) error {
  56. // do something
  57. })
  58. // SELECT * FROM user
  59. rows, err := engine.Rows(...)
  60. // SELECT * FROM user
  61. defer rows.Close()
  62. bean := new(Struct)
  63. for rows.Next() {
  64. err = rows.Scan(bean)
  65. }
  66. 5. Update one or more records
  67. affected, err := engine.ID(...).Update(&user)
  68. // UPDATE user SET ...
  69. 6. Delete one or more records, Delete MUST has condition
  70. affected, err := engine.Where(...).Delete(&user)
  71. // DELETE FROM user Where ...
  72. 7. Count records
  73. counts, err := engine.Count(&user)
  74. // SELECT count(*) AS total FROM user
  75. counts, err := engine.SQL("select count(*) FROM user").Count()
  76. // select count(*) FROM user
  77. 8. Sum records
  78. sumFloat64, err := engine.Sum(&user, "id")
  79. // SELECT sum(id) from user
  80. sumFloat64s, err := engine.Sums(&user, "id1", "id2")
  81. // SELECT sum(id1), sum(id2) from user
  82. sumInt64s, err := engine.SumsInt(&user, "id1", "id2")
  83. // SELECT sum(id1), sum(id2) from user
  84. Conditions
  85. The above 8 methods could use with condition methods chainable.
  86. Notice: the above 8 methods should be the last chainable method.
  87. 1. ID, In
  88. engine.ID(1).Get(&user) // for single primary key
  89. // SELECT * FROM user WHERE id = 1
  90. engine.ID(schemas.PK{1, 2}).Get(&user) // for composite primary keys
  91. // SELECT * FROM user WHERE id1 = 1 AND id2 = 2
  92. engine.In("id", 1, 2, 3).Find(&users)
  93. // SELECT * FROM user WHERE id IN (1, 2, 3)
  94. engine.In("id", []int{1, 2, 3}).Find(&users)
  95. // SELECT * FROM user WHERE id IN (1, 2, 3)
  96. 2. Where, And, Or
  97. engine.Where().And().Or().Find()
  98. // SELECT * FROM user WHERE (.. AND ..) OR ...
  99. 3. OrderBy, Asc, Desc
  100. engine.Asc().Desc().Find()
  101. // SELECT * FROM user ORDER BY .. ASC, .. DESC
  102. engine.OrderBy().Find()
  103. // SELECT * FROM user ORDER BY ..
  104. 4. Limit, Top
  105. engine.Limit().Find()
  106. // SELECT * FROM user LIMIT .. OFFSET ..
  107. engine.Top(5).Find()
  108. // SELECT TOP 5 * FROM user // for mssql
  109. // SELECT * FROM user LIMIT .. OFFSET 0 //for other databases
  110. 5. SQL, let you custom SQL
  111. var users []User
  112. engine.SQL("select * from user").Find(&users)
  113. 6. Cols, Omit, Distinct
  114. var users []*User
  115. engine.Cols("col1, col2").Find(&users)
  116. // SELECT col1, col2 FROM user
  117. engine.Cols("col1", "col2").Where().Update(user)
  118. // UPDATE user set col1 = ?, col2 = ? Where ...
  119. engine.Omit("col1").Find(&users)
  120. // SELECT col2, col3 FROM user
  121. engine.Omit("col1").Insert(&user)
  122. // INSERT INTO table (non-col1) VALUES ()
  123. engine.Distinct("col1").Find(&users)
  124. // SELECT DISTINCT col1 FROM user
  125. 7. Join, GroupBy, Having
  126. engine.GroupBy("name").Having("name='xlw'").Find(&users)
  127. //SELECT * FROM user GROUP BY name HAVING name='xlw'
  128. engine.Join("LEFT", "userdetail", "user.id=userdetail.id").Find(&users)
  129. //SELECT * FROM user LEFT JOIN userdetail ON user.id=userdetail.id
  130. Builder
  131. xorm could work with xorm.io/builder directly.
  132. 1. With Where
  133. var cond = builder.Eq{"a":1, "b":2}
  134. engine.Where(cond).Find(&users)
  135. 2. With In
  136. var subQuery = builder.Select("name").From("group")
  137. engine.In("group_name", subQuery).Find(&users)
  138. 3. With Join
  139. var subQuery = builder.Select("name").From("group")
  140. engine.Join("INNER", subQuery, "group.id = user.group_id").Find(&users)
  141. 4. With SetExprs
  142. var subQuery = builder.Select("name").From("group")
  143. engine.ID(1).SetExprs("name", subQuery).Update(new(User))
  144. 5. With SQL
  145. var query = builder.Select("name").From("group")
  146. results, err := engine.SQL(query).Find(&groups)
  147. 6. With Query
  148. var query = builder.Select("name").From("group")
  149. results, err := engine.Query(query)
  150. results, err := engine.QueryString(query)
  151. results, err := engine.QueryInterface(query)
  152. 7. With Exec
  153. var query = builder.Insert("a, b").Into("table1").Select("b, c").From("table2")
  154. results, err := engine.Exec(query)
  155. More usage, please visit http://xorm.io/docs
  156. */
  157. package xorm