imporved README
This commit is contained in:
parent
3c887fdf62
commit
08f3a5f69b
229
README.md
229
README.md
|
@ -39,190 +39,223 @@ Drivers for Go's sql package which currently support database/sql includes:
|
||||||
|
|
||||||
1.Create a database engine just like sql.Open, commonly you just need create once.
|
1.Create a database engine just like sql.Open, commonly you just need create once.
|
||||||
```Go
|
```Go
|
||||||
import (_ "github.com/Go-SQL-Driver/MySQL"
|
import (
|
||||||
"github.com/lunny/xorm")
|
_ "github.com/Go-SQL-Driver/MySQL"
|
||||||
|
"github.com/lunny/xorm"
|
||||||
|
)
|
||||||
engine := xorm.Create("mysql", "root:123@/test?charset=utf8")
|
engine := xorm.Create("mysql", "root:123@/test?charset=utf8")
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
import (_ "github.com/mattn/go-sqlite3"
|
import (
|
||||||
"github.com/lunny/xorm")
|
_ "github.com/mattn/go-sqlite3"
|
||||||
engine = xorm.Create("sqlite3", "./test.db")
|
"github.com/lunny/xorm"
|
||||||
|
)
|
||||||
|
engine = xorm.Create("sqlite3", "./test.db")
|
||||||
```
|
```
|
||||||
|
|
||||||
2.Define a struct
|
2.Define a struct
|
||||||
|
|
||||||
|
```Go
|
||||||
type User struct {
|
type User struct {
|
||||||
Id int
|
Id int
|
||||||
Name string
|
Name string
|
||||||
Age int `xorm:"-"`
|
Age int `xorm:"-"`
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
3.When you set up your program, you can use CreateTables to create database tables.
|
3.When you set up your program, you can use CreateTables to create database tables.
|
||||||
|
|
||||||
|
```Go
|
||||||
err := engine.CreateTables(&User{})
|
err := engine.CreateTables(&User{})
|
||||||
// or err := engine.Map(&User{}, &Article{})
|
// or err := engine.Map(&User{}, &Article{})
|
||||||
// err = engine.CreateAll()
|
// err = engine.CreateAll()
|
||||||
|
```
|
||||||
|
|
||||||
4.then, insert an struct to table
|
4.then, insert an struct to table
|
||||||
|
|
||||||
id, err := engine.Insert(&User{Name:"lunny"})
|
```Go
|
||||||
|
id, err := engine.Insert(&User{Name:"lunny"})
|
||||||
|
```
|
||||||
|
|
||||||
or if you want to update records
|
or if you want to update records
|
||||||
|
|
||||||
user := User{Name:"xlw"}
|
```Go
|
||||||
rows, err := engine.Update(&user, &User{Id:1})
|
user := User{Name:"xlw"}
|
||||||
// or rows, err := engine.Where("id = ?", 1).Update(&user)
|
rows, err := engine.Update(&user, &User{Id:1})
|
||||||
// or rows, err := engine.Id(1).Update(&user)
|
// or rows, err := engine.Where("id = ?", 1).Update(&user)
|
||||||
|
// or rows, err := engine.Id(1).Update(&user)
|
||||||
|
```
|
||||||
|
|
||||||
5.Fetch a single object by user
|
5.Fetch a single object by user
|
||||||
|
|
||||||
var user = User{Id:27}
|
```Go
|
||||||
err := engine.Get(&user)
|
var user = User{Id:27}
|
||||||
// or err := engine.Id(27).Get(&user)
|
err := engine.Get(&user)
|
||||||
|
// or err := engine.Id(27).Get(&user)
|
||||||
|
|
||||||
var user = User{Name:"xlw"}
|
var user = User{Name:"xlw"}
|
||||||
err := engine.Get(&user)
|
err := engine.Get(&user)
|
||||||
|
```
|
||||||
|
|
||||||
6.Fetch multipe objects, use Find:
|
6.Fetch multipe objects, use Find:
|
||||||
|
|
||||||
var everyone []Userinfo
|
```Go
|
||||||
err := engine.Find(&everyone)
|
var everyone []Userinfo
|
||||||
|
err := engine.Find(&everyone)
|
||||||
|
```
|
||||||
|
|
||||||
6.1 also you can use Where, Limit
|
6.1 also you can use Where, Limit
|
||||||
|
|
||||||
var allusers []Userinfo
|
```Go
|
||||||
err := engine.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
var allusers []Userinfo
|
||||||
|
err := engine.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
||||||
|
```
|
||||||
|
|
||||||
6.2 or you can use a struct query
|
6.2 or you can use a struct query
|
||||||
|
|
||||||
var tenusers []Userinfo
|
```Go
|
||||||
err := engine.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 offset 0
|
var tenusers []Userinfo
|
||||||
|
err := engine.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 offset 0
|
||||||
|
```
|
||||||
|
|
||||||
6.3 or In function
|
6.3 or In function
|
||||||
|
|
||||||
var tenusers []Userinfo
|
```Go
|
||||||
err := engine.In("id", 1, 3, 5).Find(&tenusers) //Get All id in (1, 3, 5)
|
var tenusers []Userinfo
|
||||||
|
err := engine.In("id", 1, 3, 5).Find(&tenusers) //Get All id in (1, 3, 5)
|
||||||
|
```
|
||||||
|
|
||||||
7.Delete
|
7.Delete
|
||||||
|
|
||||||
err := engine.Delete(&User{Id:1})
|
```Go
|
||||||
// or err := engine.Id(1).Delete(&User{})
|
err := engine.Delete(&User{Id:1})
|
||||||
|
// or err := engine.Id(1).Delete(&User{})
|
||||||
|
```
|
||||||
|
|
||||||
8.Count
|
8.Count
|
||||||
|
|
||||||
total, err := engine.Count(&User{Name:"xlw"})
|
```Go
|
||||||
|
total, err := engine.Count(&User{Name:"xlw"})
|
||||||
|
```
|
||||||
|
|
||||||
##Execute SQL
|
##Execute SQL
|
||||||
Of course, SQL execution is also provided.
|
Of course, SQL execution is also provided.
|
||||||
|
|
||||||
1.if select then use Query
|
1.if select then use Query
|
||||||
|
|
||||||
sql := "select * from userinfo"
|
```Go
|
||||||
results, err := engine.Query(sql)
|
sql := "select * from userinfo"
|
||||||
|
results, err := engine.Query(sql)
|
||||||
|
```
|
||||||
|
|
||||||
2.if insert, update or delete then use Exec
|
2.if insert, update or delete then use Exec
|
||||||
|
|
||||||
sql = "update userinfo set username=? where id=?"
|
```Go
|
||||||
res, err := engine.Exec(sql, "xiaolun", 1)
|
sql = "update userinfo set username=? where id=?"
|
||||||
|
res, err := engine.Exec(sql, "xiaolun", 1)
|
||||||
|
```
|
||||||
|
|
||||||
##Deep Use
|
##Deep Use
|
||||||
for deep usage, you should create a session, this func will create a database connection immediatelly
|
for deep usage, you should create a session, this func will create a database connection immediatelly
|
||||||
|
|
||||||
session, err := engine.MakeSession()
|
```Go
|
||||||
defer session.Close()
|
session, err := engine.MakeSession()
|
||||||
if err != nil {
|
defer session.Close()
|
||||||
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
1.Fetch a single object by where
|
1.Fetch a single object by where
|
||||||
|
|
||||||
var user Userinfo
|
```Go
|
||||||
session.Where("id=?", 27).Get(&user)
|
var user Userinfo
|
||||||
|
session.Where("id=?", 27).Get(&user)
|
||||||
|
|
||||||
var user2 Userinfo
|
var user2 Userinfo
|
||||||
session.Where("name = ?", "john").Get(&user3) // more complex query
|
session.Where("name = ?", "john").Get(&user3) // more complex query
|
||||||
|
|
||||||
var user3 Userinfo
|
|
||||||
session.Where("name = ? and age < ?", "john", 88).Get(&user4) // even more complex
|
|
||||||
|
|
||||||
|
var user3 Userinfo
|
||||||
|
session.Where("name = ? and age < ?", "john", 88).Get(&user4) // even more complex
|
||||||
|
```
|
||||||
|
|
||||||
2.Fetch multiple objects
|
2.Fetch multiple objects
|
||||||
|
|
||||||
var allusers []Userinfo
|
```Go
|
||||||
err := session.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
var allusers []Userinfo
|
||||||
|
err := session.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
||||||
|
|
||||||
var tenusers []Userinfo
|
var tenusers []Userinfo
|
||||||
err := session.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 if omit offset the default is 0
|
err := session.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 if omit offset the default is 0
|
||||||
|
|
||||||
var everyone []Userinfo
|
var everyone []Userinfo
|
||||||
err := session.Find(&everyone)
|
err := session.Find(&everyone)
|
||||||
|
```
|
||||||
|
|
||||||
3.Transaction
|
3.Transaction
|
||||||
|
|
||||||
// add Begin() before any action
|
```Go
|
||||||
session.Begin()
|
// add Begin() before any action
|
||||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
session.Begin()
|
||||||
_, err = session.Insert(&user1)
|
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
||||||
if err != nil {
|
_, err = session.Insert(&user1)
|
||||||
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user2 := Userinfo{Username: "yyy"}
|
user2 := Userinfo{Username: "yyy"}
|
||||||
_, err = session.Where("id = ?", 2).Update(&user2)
|
_, err = session.Where("id = ?", 2).Update(&user2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = session.Delete(&user2)
|
_, err = session.Delete(&user2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// add Commit() after all actions
|
// add Commit() after all actions
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
4.Mixed Transaction
|
4.Mixed Transaction
|
||||||
|
|
||||||
// add Begin() before any action
|
```Go
|
||||||
session.Begin()
|
// add Begin() before any action
|
||||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
session.Begin()
|
||||||
_, err = session.Insert(&user1)
|
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
||||||
if err != nil {
|
_, err = session.Insert(&user1)
|
||||||
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user2 := Userinfo{Username: "yyy"}
|
user2 := Userinfo{Username: "yyy"}
|
||||||
_, err = session.Where("id = ?", 2).Update(&user2)
|
_, err = session.Where("id = ?", 2).Update(&user2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = session.Exec("delete from userinfo where username = ?", user2.Username)
|
_, err = session.Exec("delete from userinfo where username = ?", user2.Username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// add Commit() after all actions
|
// add Commit() after all actions
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##Mapping Rules
|
##Mapping Rules
|
||||||
1.Struct and struct's fields name should be Pascal style, and the table and column's name default is SQL style.
|
1.Struct and struct's fields name should be Pascal style, and the table and column's name default is SQL style.
|
||||||
|
@ -261,13 +294,15 @@ Another is use field tag, field tag support the below keywords which split with
|
||||||
|
|
||||||
For Example
|
For Example
|
||||||
|
|
||||||
type Userinfo struct {
|
```Go
|
||||||
|
type Userinfo struct {
|
||||||
Uid int `xorm:"id pk not null autoincr"`
|
Uid int `xorm:"id pk not null autoincr"`
|
||||||
Username string
|
Username string
|
||||||
Departname string
|
Departname string
|
||||||
Alias string `xorm:"-"`
|
Alias string `xorm:"-"`
|
||||||
Created time.Time
|
Created time.Time
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##Documents
|
##Documents
|
||||||
Please visit [GoWalker](http://gowalker.org/github.com/lunny/xorm)
|
Please visit [GoWalker](http://gowalker.org/github.com/lunny/xorm)
|
||||||
|
@ -276,9 +311,11 @@ Please visit [GoWalker](http://gowalker.org/github.com/lunny/xorm)
|
||||||
|
|
||||||
Use space.
|
Use space.
|
||||||
|
|
||||||
type User struct {
|
```Go
|
||||||
|
type User struct {
|
||||||
Name string `json:"name" xorm:"name"`
|
Name string `json:"name" xorm:"name"`
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
|
|
238
README_CN.md
238
README_CN.md
|
@ -37,185 +37,222 @@ xorm是一个Go语言的ORM库. 通过它可以使数据库操作非常简便。
|
||||||
|
|
||||||
1.创建数据库引擎,这个函数的参数和sql.Open相同,但不会立即创建连接 (例如: mysql)
|
1.创建数据库引擎,这个函数的参数和sql.Open相同,但不会立即创建连接 (例如: mysql)
|
||||||
|
|
||||||
import (_ "github.com/Go-SQL-Driver/MySQL"
|
```Go
|
||||||
"github.com/lunny/xorm")
|
import (
|
||||||
engine := xorm.Create("mysql", "root:123@/test?charset=utf8")
|
_ "github.com/Go-SQL-Driver/MySQL"
|
||||||
|
"github.com/lunny/xorm"
|
||||||
|
)
|
||||||
|
engine := xorm.Create("mysql", "root:123@/test?charset=utf8")
|
||||||
|
```
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
import (_ "github.com/mattn/go-sqlite3"
|
```Go
|
||||||
"github.com/lunny/xorm")
|
import (
|
||||||
engine = xorm.Create("sqlite3", "./test.db")
|
_ "github.com/mattn/go-sqlite3"
|
||||||
|
"github.com/lunny/xorm"
|
||||||
|
)
|
||||||
|
engine = xorm.Create("sqlite3", "./test.db")
|
||||||
|
```
|
||||||
|
|
||||||
2.定义一个结构体
|
2.定义一个结构体
|
||||||
|
|
||||||
|
```Go
|
||||||
type User struct {
|
type User struct {
|
||||||
Id int
|
Id int
|
||||||
Name string
|
Name string
|
||||||
Age int `xorm:"-"`
|
Age int `xorm:"-"`
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
3.在程序初始化时,可能会需要创建表
|
3.在程序初始化时,可能会需要创建表
|
||||||
|
|
||||||
err := engine.CreateTables(&User{})
|
```Go
|
||||||
|
err := engine.CreateTables(&User{})
|
||||||
|
```
|
||||||
|
|
||||||
4.然后,可以将一个结构体作为一条记录插入到表中。
|
4.然后,可以将一个结构体作为一条记录插入到表中。
|
||||||
|
|
||||||
id, err := engine.Insert(&User{Name:"lunny"})
|
```Go
|
||||||
|
id, err := engine.Insert(&User{Name:"lunny"})
|
||||||
|
```
|
||||||
|
|
||||||
或者执行更新操作:
|
或者执行更新操作:
|
||||||
|
|
||||||
user := User{Name:"xlw"}
|
```Go
|
||||||
rows, err := engine.Update(&user, &User{Id:1})
|
user := User{Name:"xlw"}
|
||||||
// rows, err := engine.Where("id = ?", 1).Update(&user)
|
rows, err := engine.Update(&user, &User{Id:1})
|
||||||
// or rows, err := engine.Id(1).Update(&user)
|
// rows, err := engine.Where("id = ?", 1).Update(&user)
|
||||||
|
// or rows, err := engine.Id(1).Update(&user)
|
||||||
|
```
|
||||||
|
|
||||||
5.获取单个对象,可以用Get方法:
|
5.获取单个对象,可以用Get方法:
|
||||||
|
|
||||||
var user = User{Id:27}
|
```Go
|
||||||
err := engine.Get(&user)
|
var user = User{Id:27}
|
||||||
// or err := engine.Id(27).Get(&user)
|
err := engine.Get(&user)
|
||||||
|
// or err := engine.Id(27).Get(&user)
|
||||||
|
|
||||||
var user = User{Name:"xlw"}
|
var user = User{Name:"xlw"}
|
||||||
err := engine.Get(&user)
|
err := engine.Get(&user)
|
||||||
|
```
|
||||||
|
|
||||||
6.获取多个对象,可以用Find方法:
|
6.获取多个对象,可以用Find方法:
|
||||||
|
|
||||||
var everyone []Userinfo
|
```Go
|
||||||
err := engine.Find(&everyone)
|
var everyone []Userinfo
|
||||||
|
err := engine.Find(&everyone)
|
||||||
|
```
|
||||||
|
|
||||||
6.1 你也可以使用Where和Limit方法设定条件和查询数量
|
6.1 你也可以使用Where和Limit方法设定条件和查询数量
|
||||||
|
|
||||||
var allusers []Userinfo
|
```Go
|
||||||
err := engine.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
var allusers []Userinfo
|
||||||
|
err := engine.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
||||||
|
```
|
||||||
|
|
||||||
6.2 用一个结构体作为查询条件也是允许的
|
6.2 用一个结构体作为查询条件也是允许的
|
||||||
|
|
||||||
var tenusers []Userinfo
|
```Go
|
||||||
err := engine.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 offset 0
|
var tenusers []Userinfo
|
||||||
|
err := engine.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 offset 0
|
||||||
|
```
|
||||||
|
|
||||||
6.3 也可以调用In函数
|
6.3 也可以调用In函数
|
||||||
|
|
||||||
var tenusers []Userinfo
|
```Go
|
||||||
err := engine.In("id", 1, 3, 5).Find(&tenusers) //Get All id in (1, 3, 5)
|
var tenusers []Userinfo
|
||||||
|
err := engine.In("id", 1, 3, 5).Find(&tenusers) //Get All id in (1, 3, 5)
|
||||||
|
```
|
||||||
|
|
||||||
7.Delete方法
|
7.Delete方法
|
||||||
|
|
||||||
err := engine.Delete(&User{Id:1})
|
```Go
|
||||||
// or err := engine.Id(1).Delete(&User{})
|
err := engine.Delete(&User{Id:1})
|
||||||
|
// or err := engine.Id(1).Delete(&User{})
|
||||||
|
```
|
||||||
|
|
||||||
8.Count方法
|
8.Count方法
|
||||||
|
|
||||||
total, err := engine.Count(&User{Name:"xlw"})
|
```Go
|
||||||
|
total, err := engine.Count(&User{Name:"xlw"})
|
||||||
|
```
|
||||||
|
|
||||||
##直接执行SQL语句
|
##直接执行SQL语句
|
||||||
当然,如果你想直接使用SQL语句进行操作,也是允许的。
|
当然,如果你想直接使用SQL语句进行操作,也是允许的。
|
||||||
|
|
||||||
如果执行Select,请用Query()
|
如果执行Select,请用Query()
|
||||||
|
|
||||||
sql := "select * from userinfo"
|
```Go
|
||||||
results, err := engine.Query(sql)
|
sql := "select * from userinfo"
|
||||||
|
results, err := engine.Query(sql)
|
||||||
|
```
|
||||||
|
|
||||||
如果执行Insert, Update, Delete 等操作,请用Exec()
|
如果执行Insert, Update, Delete 等操作,请用Exec()
|
||||||
|
|
||||||
sql = "update userinfo set username=? where id=?"
|
```Go
|
||||||
res, err := engine.Exec(sql, "xiaolun", 1)
|
sql = "update userinfo set username=? where id=?"
|
||||||
|
res, err := engine.Exec(sql, "xiaolun", 1)
|
||||||
|
```
|
||||||
|
|
||||||
##高级用法
|
##高级用法
|
||||||
更高级的用法,我们必须要使用session对象,session对象在创建时会立刻创建一个数据库连接。
|
更高级的用法,我们必须要使用session对象,session对象在创建时会立刻创建一个数据库连接。
|
||||||
|
|
||||||
session, err := engine.MakeSession()
|
```Go
|
||||||
defer session.Close()
|
session, err := engine.MakeSession()
|
||||||
if err != nil {
|
defer session.Close()
|
||||||
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
1.session对象同样也可以查询
|
1.session对象同样也可以查询
|
||||||
|
|
||||||
var user Userinfo
|
```Go
|
||||||
session.Where("id=?", 27).Get(&user)
|
var user Userinfo
|
||||||
|
session.Where("id=?", 27).Get(&user)
|
||||||
|
|
||||||
var user2 Userinfo
|
var user2 Userinfo
|
||||||
session.Where("name = ?", "john").Get(&user3) // more complex query
|
session.Where("name = ?", "john").Get(&user3) // more complex query
|
||||||
|
|
||||||
var user3 Userinfo
|
|
||||||
session.Where("name = ? and age < ?", "john", 88).Get(&user4) // even more complex
|
|
||||||
|
|
||||||
|
var user3 Userinfo
|
||||||
|
session.Where("name = ? and age < ?", "john", 88).Get(&user4) // even more complex
|
||||||
|
```
|
||||||
|
|
||||||
2.获取多个对象
|
2.获取多个对象
|
||||||
|
|
||||||
var allusers []Userinfo
|
```Go
|
||||||
err := session.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
var allusers []Userinfo
|
||||||
|
err := session.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
||||||
|
|
||||||
var tenusers []Userinfo
|
var tenusers []Userinfo
|
||||||
err := session.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 if omit offset the default is 0
|
err := session.Limit(10).Find(&tenusers, &Userinfo{Name:"xlw"}) //Get All Name="xlw" limit 10 if omit offset the default is 0
|
||||||
|
|
||||||
var everyone []Userinfo
|
var everyone []Userinfo
|
||||||
err := session.Find(&everyone)
|
err := session.Find(&everyone)
|
||||||
|
```
|
||||||
|
|
||||||
3.事务处理
|
3.事务处理
|
||||||
|
|
||||||
// add Begin() before any action
|
```Go
|
||||||
session.Begin()
|
// add Begin() before any action
|
||||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
session.Begin()
|
||||||
_, err = session.Insert(&user1)
|
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
||||||
if err != nil {
|
_, err = session.Insert(&user1)
|
||||||
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user2 := Userinfo{Username: "yyy"}
|
user2 := Userinfo{Username: "yyy"}
|
||||||
_, err = session.Where("id = ?", 2).Update(&user2)
|
_, err = session.Where("id = ?", 2).Update(&user2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = session.Delete(&user2)
|
_, err = session.Delete(&user2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// add Commit() after all actions
|
// add Commit() after all actions
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
4.混合型事务,这个事务中,既有直接的SQL语句,又有其它方法:
|
4.混合型事务,这个事务中,既有直接的SQL语句,又有ORM方法:
|
||||||
|
|
||||||
// add Begin() before any action
|
```Go
|
||||||
session.Begin()
|
// add Begin() before any action
|
||||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
session.Begin()
|
||||||
_, err = session.Insert(&user1)
|
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
||||||
if err != nil {
|
_, err = session.Insert(&user1)
|
||||||
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user2 := Userinfo{Username: "yyy"}
|
user2 := Userinfo{Username: "yyy"}
|
||||||
_, err = session.Where("id = ?", 2).Update(&user2)
|
_, err = session.Where("id = ?", 2).Update(&user2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = session.Exec("delete from userinfo where username = ?", user2.Username)
|
_, err = session.Exec("delete from userinfo where username = ?", user2.Username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Rollback()
|
session.Rollback()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// add Commit() after all actions
|
// add Commit() after all actions
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##映射规则
|
##映射规则
|
||||||
1.Struct 和 Struct 的field名字应该为Pascal式命名,默认的映射规则将转换成用下划线连接的命名规则,这个映射是自动进行的,当然,你可以通过修改Engine的成员Mapper来改变它。
|
1.Struct 和 Struct 的field名字应该为Pascal式命名,默认的映射规则将转换成用下划线连接的命名规则,这个映射是自动进行的,当然,你可以通过修改Engine的成员Mapper来改变它。
|
||||||
|
@ -254,13 +291,15 @@ UserInfo中的成员UserName将会自动对应名为user_name的字段。
|
||||||
</table>
|
</table>
|
||||||
例如:
|
例如:
|
||||||
|
|
||||||
type Userinfo struct {
|
```Go
|
||||||
|
type Userinfo struct {
|
||||||
Uid int `xorm:"id pk not null autoincr"`
|
Uid int `xorm:"id pk not null autoincr"`
|
||||||
Username string
|
Username string
|
||||||
Departname string
|
Departname string
|
||||||
Alias string `xorm:"-"`
|
Alias string `xorm:"-"`
|
||||||
Created time.Time
|
Created time.Time
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##文档
|
##文档
|
||||||
请访问 [GoWalker](http://gowalker.org/github.com/lunny/xorm) 查看详细文档
|
请访问 [GoWalker](http://gowalker.org/github.com/lunny/xorm) 查看详细文档
|
||||||
|
@ -270,14 +309,17 @@ UserInfo中的成员UserName将会自动对应名为user_name的字段。
|
||||||
|
|
||||||
答案:使用空格分开
|
答案:使用空格分开
|
||||||
|
|
||||||
type User struct {
|
```Go
|
||||||
|
type User struct {
|
||||||
Name string `json:"name" xorm:"name"`
|
Name string `json:"name" xorm:"name"`
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
2.问:xorm是否带有连接池
|
2.问:xorm是否带有连接池
|
||||||
|
|
||||||
答案:database/sql默认就有连接池,因此xorm本身没有内建连接池,在使用过程中会自动调用database/sql的实现。
|
答案:database/sql默认就有连接池,因此xorm本身没有内建连接池,在使用过程中会自动调用database/sql的实现。
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
BSD License
|
BSD License
|
||||||
[http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/)
|
[http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/)
|
||||||
|
|
Loading…
Reference in New Issue