142 lines
3.5 KiB
Markdown
142 lines
3.5 KiB
Markdown
# xorm
|
|
===========
|
|
|
|
[中文](README_CN.md)
|
|
|
|
xorm is an ORM for Go. It lets you map Go structs to tables in a database.
|
|
|
|
Right now, it interfaces with Mysql/SQLite. The goal however is to add support for PostgreSQL/DB2/MS ADODB/ODBC/Oracle in the future.
|
|
|
|
All in all, it's not entirely ready for advanced use yet, but it's getting there.
|
|
|
|
Drivers for Go's sql package which support database/sql includes:
|
|
|
|
Mysql: [github.com/ziutek/mymysql/godrv](https://github.com/ziutek/mymysql/godrv)
|
|
|
|
Mysql: [github.com/Go-SQL-Driver/MySQL](https://github.com/Go-SQL-Driver/MySQL)
|
|
|
|
SQLite: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3)
|
|
|
|
## Installing xorm
|
|
|
|
go get github.com/lunny/xorm
|
|
|
|
## Quick Start
|
|
|
|
1.Create a database engine (for example: mysql)
|
|
|
|
engine := xorm.Create("mysql://root:123@localhost/test")
|
|
|
|
|
|
2.Define your struct
|
|
|
|
|
|
type User struct {
|
|
Id int
|
|
Name string
|
|
Age int `xorm:"-"`
|
|
}
|
|
|
|
|
|
for Simple Task, just use engine's functions:
|
|
|
|
before beginning, you should create a database in mysql and then we will create the tables.
|
|
|
|
|
|
err := engine.CreateTables(&User{})
|
|
|
|
|
|
then, insert an struct to table
|
|
|
|
|
|
id, err := engine.Insert(&User{Name:"lunny"})
|
|
|
|
|
|
or you want to update this struct
|
|
|
|
|
|
user := User{Id:1, Name:"xlw"}
|
|
rows, err := engine.Update(&user)
|
|
|
|
|
|
3.Fetch a single object by user
|
|
|
|
|
|
var user = User{Id:27}
|
|
engine.Get(&user)
|
|
|
|
var user = User{Name:"xlw"}
|
|
engine.Get(&user)
|
|
|
|
|
|
##Deep Use
|
|
for deep use, you should create a session, this func will create a connection to db
|
|
|
|
|
|
session, err := engine.MakeSession()
|
|
defer session.Close()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
|
|
1.Fetch a single object by where
|
|
|
|
|
|
var user Userinfo
|
|
session.Where("id=?", 27).Get(&user)
|
|
|
|
var user2 Userinfo
|
|
session.Where(3).Get(&user2) // this is shorthand for the version above
|
|
|
|
var user3 Userinfo
|
|
session.Where("name = ?", "john").Get(&user3) // more complex query
|
|
|
|
var user4 Userinfo
|
|
session.Where("name = ? and age < ?", "john", 88).Get(&user4) // even more complex
|
|
|
|
|
|
2.Fetch multiple objects
|
|
|
|
|
|
var allusers []Userinfo
|
|
err := session.Where("id > ?", "3").Limit(10,20).Find(&allusers) //Get id>3 limit 10 offset 20
|
|
|
|
var tenusers []Userinfo
|
|
err := session.Where("id > ?", "3").Limit(10).Find(&tenusers) //Get id>3 limit 10 if omit offset the default is 0
|
|
|
|
var everyone []Userinfo
|
|
err := session.Find(&everyone)
|
|
|
|
|
|
##***Mapping Rules***
|
|
1.Struct and struct's fields name should be Pascal style, and the table and column's name default is us
|
|
for example:
|
|
The structs Name 'UserInfo' will turn into the table name 'user_info', the same as the keyname.
|
|
If the keyname is 'UserName' will turn into the select colum 'user_name'
|
|
|
|
2.You have two method to change the rule. One is implement your own Map interface according IMapper, you can find the interface in mapper.go and set it to engine.Mapper
|
|
|
|
another is use field tag, field tag support the below keywords:
|
|
* [name] column name
|
|
* pk the field is a primary key
|
|
* int(11)/varchar(50) column type
|
|
* autoincr auto incrment
|
|
* [not ]null if column can be null value
|
|
* unique unique
|
|
* \- this field is not map as a table column
|
|
|
|
##FAQ
|
|
1.How the xorm tag use both with json?
|
|
|
|
use space
|
|
|
|
type User struct {
|
|
User string `json:"user" orm:"user_id"`
|
|
}
|
|
|
|
## LICENSE
|
|
|
|
BSD License
|
|
[http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/)
|