xorm/doc.go

155 lines
4.2 KiB
Go
Raw Normal View History

2014-01-25 02:50:42 +00:00
// Copyright 2013 - 2014 The XORM Authors. All rights reserved.
2013-09-01 02:37:46 +00:00
// Use of this source code is governed by a BSD
// license that can be found in the LICENSE file.
2013-11-22 01:20:41 +00:00
/*
2013-11-22 02:30:52 +00:00
Package xorm is a simple and powerful ORM for Go.
2013-11-22 01:20:41 +00:00
2013-11-22 05:05:10 +00:00
Installation
2013-11-26 02:41:02 +00:00
Make sure you have installed Go 1.1+ and then:
2014-04-11 09:16:43 +00:00
go get github.com/go-xorm/xorm
2013-11-22 05:05:10 +00:00
Create Engine
Firstly, we should new an engine for a database
2013-11-22 01:20:41 +00:00
2013-12-09 02:29:23 +00:00
engine, err := xorm.NewEngine(driverName, dataSourceName)
2013-11-22 01:20:41 +00:00
Method NewEngine's parameters is the same as sql.Open. It depends
2013-11-22 05:05:10 +00:00
drivers' implementation.
2014-09-07 03:50:11 +00:00
Generally, one engine for an application is enough. You can set it as package variable.
2013-11-22 05:05:10 +00:00
2013-11-26 02:41:02 +00:00
Raw Methods
2013-11-22 05:05:10 +00:00
Xorm also support raw sql execution:
2014-09-07 03:50:11 +00:00
1. query a SQL string, the returned results is []map[string][]byte
2013-11-22 05:05:10 +00:00
2013-12-09 02:29:23 +00:00
results, err := engine.Query("select * from user")
2013-11-22 01:20:41 +00:00
2014-09-07 03:50:11 +00:00
2. execute a SQL string, the returned results
2013-11-22 05:05:10 +00:00
2013-12-09 02:29:23 +00:00
affected, err := engine.Exec("update user set .... where ...")
2013-11-22 05:05:10 +00:00
2013-11-26 02:41:02 +00:00
ORM Methods
2013-11-22 05:05:10 +00:00
There are 7 major ORM methods and many helpful methods to use to operate database.
1. Insert one or multipe records to database
2013-12-09 02:29:23 +00:00
affected, err := engine.Insert(&struct)
// INSERT INTO struct () values ()
affected, err := engine.Insert(&struct1, &struct2)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values ()
affected, err := engine.Insert(&sliceOfStruct)
// INSERT INTO struct () values (),(),()
affected, err := engine.Insert(&struct1, &sliceOfStruct2)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values (),(),()
2. Query one record from database
2013-12-09 02:29:23 +00:00
has, err := engine.Get(&user)
// SELECT * FROM user LIMIT 1
3. Query multiple records from database
2014-09-07 03:50:11 +00:00
sliceOfStructs := new(Struct)
err := engine.Find(sliceOfStructs)
2013-12-09 02:29:23 +00:00
// SELECT * FROM user
2013-12-31 05:51:55 +00:00
4. Query multiple records and record by record handle, there two methods, one is Iterate,
another is Raws
2014-09-07 03:50:11 +00:00
err := engine.Iterate(...)
// SELECT * FROM user
2013-12-31 05:51:55 +00:00
raws, err := engine.Raws(...)
// SELECT * FROM user
2014-09-07 03:50:11 +00:00
bean := new(Struct)
2013-12-31 05:51:55 +00:00
for raws.Next() {
2014-09-07 03:50:11 +00:00
err = raws.Scan(bean)
2013-12-31 05:51:55 +00:00
}
5. Update one or more records
2013-12-09 02:29:23 +00:00
affected, err := engine.Update(&user)
2014-09-07 03:50:11 +00:00
// UPDATE user SET ...
2014-09-07 03:50:11 +00:00
6. Delete one or more records, Delete MUST has conditon
2014-09-07 03:50:11 +00:00
affected, err := engine.Where(...).Delete(&user)
2013-12-09 02:29:23 +00:00
// DELETE FROM user Where ...
7. Count records
2013-12-09 02:29:23 +00:00
counts, err := engine.Count(&user)
// SELECT count(*) AS total FROM user
2013-11-22 05:05:10 +00:00
2013-11-26 02:41:02 +00:00
Conditions
2013-11-22 05:05:10 +00:00
2014-09-07 03:50:11 +00:00
The above 7 methods could use with condition methods chainable.
Attention: the above 7 methods should be the last chainable method.
2013-11-22 05:05:10 +00:00
1. Id, In
2014-09-07 03:50:11 +00:00
engine.Id(1).Get(&user) // for single primary key
2013-12-09 02:29:23 +00:00
// SELECT * FROM user WHERE id = 1
2014-09-07 03:50:11 +00:00
engine.Id(core.PK{1, 2}).Get(&user) // for composite primary keys
// SELECT * FROM user WHERE id1 = 1 AND id2 = 2
2013-12-09 02:29:23 +00:00
engine.In("id", 1, 2, 3).Find(&users)
// SELECT * FROM user WHERE id IN (1, 2, 3)
2014-09-07 03:50:11 +00:00
engine.In("id", []int{1, 2, 3})
// SELECT * FROM user WHERE id IN (1, 2, 3)
2013-11-22 05:05:10 +00:00
2. Where, And, Or
2013-12-09 02:29:23 +00:00
engine.Where().And().Or().Find()
// SELECT * FROM user WHERE (.. AND ..) OR ...
2013-11-22 05:05:10 +00:00
3. OrderBy, Asc, Desc
2013-12-09 02:29:23 +00:00
engine.Asc().Desc().Find()
// SELECT * FROM user ORDER BY .. ASC, .. DESC
engine.OrderBy().Find()
// SELECT * FROM user ORDER BY ..
2013-11-22 05:05:10 +00:00
4. Limit, Top
2013-12-09 02:29:23 +00:00
engine.Limit().Find()
// SELECT * FROM user LIMIT .. OFFSET ..
2014-09-07 03:50:11 +00:00
engine.Top(5).Find()
// SELECT TOP 5 * FROM user // for mssql
// SELECT * FROM user LIMIT .. OFFSET 0 //for other databases
2013-11-22 05:05:10 +00:00
2014-09-07 03:50:11 +00:00
5. Sql, let you custom SQL
2013-11-22 05:05:10 +00:00
2013-12-09 02:29:23 +00:00
engine.Sql("select * from user").Find()
2013-11-22 05:05:10 +00:00
6. Cols, Omit, Distinct
2013-12-09 02:29:23 +00:00
engine.Cols("col1, col2").Find()
// SELECT col1, col2 FROM user
2014-09-07 03:50:11 +00:00
engine.Cols("col1", "col2").Where().Update(user)
// UPDATE user set col1 = ?, col2 = ? Where ...
2013-12-09 02:29:23 +00:00
engine.Omit("col1").Find()
// SELECT col2, col3 FROM user
2014-09-07 03:50:11 +00:00
engine.Omit("col1").Insert()
// INSERT INTO table (non-col1) VALUES ()
2013-12-09 02:29:23 +00:00
engine.Distinct("col1").Find()
// SELECT DISTINCT col1 FROM user
2013-11-22 05:05:10 +00:00
7. Join, GroupBy, Having
2013-12-09 02:29:23 +00:00
engine.GroupBy("name").Having("name='xlw'").Find()
//SELECT * FROM user GROUP BY name HAVING name='xlw'
engine.Join("LEFT", "userdetail", "user.id=userdetail.id").Find()
//SELECT * FROM user LEFT JOIN userdetail ON user.id=userdetail.id
2013-11-22 05:05:10 +00:00
2014-04-11 09:16:43 +00:00
More usage, please visit https://github.com/go-xorm/xorm/blob/master/docs/QuickStartEn.md
2013-11-22 01:20:41 +00:00
*/
2013-09-01 02:37:46 +00:00
package xorm