xorm: go get github.com/go-xorm/xorm go get github.com/go-xorm/core go get github.com/go-xorm/cmd/xorm // 以上路径已舍弃
驱动: go get github.com/go-sql-driver/mysql // mysql go get github.com/mattn/go-sqlite3 //SQLite go get github.com/denisenkom/go-mssqldb // sqlserver go get github.com/lunny/godbc // sqlserver
xorm reverse mysql name:password@(ip:port)/xxx?charset=utf8 ./templates/goxorm/ windows 示例: xorm reverse mysql root:root@\(172.18.18.18:3305\)/mydb?charset=utf8 ./templates/goxorm/ 注:templates是指$GOPATH/src/github.com/go-xorm/cmd/xorm/templates
查数量 counts, err := engine.Count(&user) // SELECT count(*) AS total FROM user
// 查询一条记录,返回结构体 has, err := engine.Get(&user) // SELECT * FROM user LIMIT 1
// 查询多条记录 sliceOfStructs := new(Struct) err := engine.Find(sliceOfStructs) // SELECT * FROM user
err := engine.Iterate(...) // SELECT * FROM user
rows, err := engine.Rows(...) // SELECT * FROM user bean := new(Struct) for rows.Next() { err = rows.Scan(bean) }
有条件的数据库操作
Id In
1 2 3 4 5 6 7 8
engine.Id(1).Get(&user) // for single primary key // SELECT * FROM user WHERE id = 1 engine.Id(core.PK{1, 2}).Get(&user) // for composite primary keys // SELECT * FROM user WHERE id1 = 1 AND id2 = 2 engine.In("id", 1, 2, 3).Find(&users) // SELECT * FROM user WHERE id IN (1, 2, 3) engine.In("id", []int{1, 2, 3}) // SELECT * FROM user WHERE id IN (1, 2, 3)
Where And Or
1 2
engine.Where().And().Or().Find() // SELECT * FROM user WHERE (.. AND ..) OR ...
OrderBy Asc Desc
1 2 3 4
engine.Asc().Desc().Find() // SELECT * FROM user ORDER BY .. ASC, .. DESC engine.OrderBy().Find() // SELECT * FROM user ORDER BY ..
Limit Top
1 2 3 4 5
engine.Limit().Find() // SELECT * FROM user LIMIT .. OFFSET .. engine.Top(5).Find() // SELECT TOP 5 * FROM user // for mssql // SELECT * FROM user LIMIT .. OFFSET 0 //for other databases
Cols Omit Distinct
1 2 3 4 5 6 7 8 9 10
engine.Cols("col1, col2").Find() // SELECT col1, col2 FROM user engine.Cols("col1", "col2").Where().Update(user) // UPDATE user set col1 = ?, col2 = ? Where ... engine.Omit("col1").Find() // SELECT col2, col3 FROM user engine.Omit("col1").Insert() // INSERT INTO table (non-col1) VALUES () engine.Distinct("col1").Find() // SELECT DISTINCT col1 FROM user
Join GroupBy Having
1 2 3 4
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