beedb

beedb is a go ORM,support database/sql interface,pq/mysql/sqlite

  • 所有者: astaxie/beedb
  • 平台:
  • 许可证:
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

Beedb

:exclamation: IMPORTANT: Beedb is being deprecated in favor of Beego.orm :exclamation:

Beedb is an ORM for Go. It lets you map Go structs to tables in a database. It's intended to be very lightweight, doing very little beyond what you really want. For example, when fetching data, instead of re-inventing a query syntax, we just delegate your query to the underlying database, so you can write the "where" clause of your SQL statements directly. This allows you to have more flexibility while giving you a convenience layer. But beedb also has some smart defaults, for those times when complex queries aren't necessary.

Right now, it interfaces with Mysql/SQLite/PostgreSQL/DB2/MS ADODB/ODBC/Oracle. The goal however is to add support for other databases in the future, including maybe MongoDb or NoSQL?

Relationship-support is not implemented, for this we will recommend you to use Beego.orm.

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[*]

Mysql:github.com/Go-SQL-Driver/MySQL[*]

PostgreSQL:github.com/bmizerany/pq[*]

SQLite:github.com/mattn/go-sqlite3[*]

DB2: bitbucket.org/phiggins/go-db2-cli

MS ADODB: github.com/mattn/go-adodb[*]

ODBC: bitbucket.org/miquella/mgodbc[*]

Oracle: github.com/mattn/go-oci8

Drivers marked with a [*] are tested with Beedb

API Interface

wiki/API-Interface

Installing Beedb

go get github.com/astaxie/beedb

How do we use it?

Open a database link(may be will support ConnectionPool in the future)

db, err := sql.Open("mymysql", "test/xiemengjun/123456")
if err != nil {
	panic(err)
}
orm := beedb.New(db)

with PostgreSQL,

orm := beedb.New(db, "pg")

Open Debug log, turn on the debug

beedb.OnDebug=true

Model a struct after a table in the db

type Userinfo struct {
	Uid		int	`beedb:"PK" sql:"UID" tname:"USER_INFO"` //if the table's PrimaryKey is not "Id", use this tag
	Username	string `sql:"USERNAME"`
	Departname	string `sql:"DEPARTNAME"`
	Created		time.Time `sql:"CREATED"`
}

###Caution
The structs Name 'UserInfo' will turn into the table name 'USER_INFO', as defined by the tname tag.
If the key 'UserName' will turn into the select colum 'USERNAME' because of the sql tag.

Create an object and save it

var saveone Userinfo
saveone.Username = "Test Add User"
saveone.Departname = "Test Add Departname"
saveone.Created = time.Now()
orm.Save(&saveone)

Saving new and existing objects

saveone.Username = "Update Username"
saveone.Departname = "Update Departname"
saveone.Created = time.Now()
orm.Save(&saveone)  //now saveone has the primarykey value it will update

Fetch a single object

var user Userinfo
orm.Where("uid=?", 27).Find(&user)

var user2 Userinfo
orm.Where(3).Find(&user2) // this is shorthand for the version above

var user3 Userinfo
orm.Where("name = ?", "john").Find(&user3) // more complex query

var user4 Userinfo
orm.Where("name = ? and age < ?", "john", 88).Find(&user4) // even more complex

Fetch multiple objects

var allusers []Userinfo
err := orm.Where("id > ?", "3").Limit(10,20).FindAll(&allusers) //Get id>3 limit 10 offset 20

var tenusers []Userinfo
err := orm.Where("id > ?", "3").Limit(10).FindAll(&tenusers) //Get id>3 limit 10  if omit offset the default is 0

var everyone []Userinfo
err := orm.FindAll(&everyone)

Find result as Map

//Original SQL Backinfo resultsSlice []map[string][]byte
//default PrimaryKey id
a, _ := orm.SetTable("userinfo").SetPK("uid").Where(2).Select("uid,username").FindMap()

Update with Map

t := make(map[string]interface{})
var j interface{}
j = "astaxie"
t["username"] = j
//update one
orm.SetTable("userinfo").SetPK("uid").Where(2).Update(t)

Update batch with Map

orm.SetTable("userinfo").Where("uid>?", 3).Update(t)

Insert data with Map

add := make(map[string]interface{})
j = "astaxie"
add["username"] = j
j = "cloud develop"
add["departname"] = j
j = "2012-12-02"
add["created"] = j
orm.SetTable("userinfo").Insert(add)

Insert batch with map

addslice := make([]map[string]interface{})
add:=make(map[string]interface{})
add2:=make(map[string]interface{})
j = "astaxie"
add["username"] = j
j = "cloud develop"
add["departname"] = j
j = "2012-12-02"
add["created"] = j
j = "astaxie2"
add2["username"] = j
j = "cloud develop2"
add2["departname"] = j
j = "2012-12-02"
add2["created"] = j
addslice =append(addslice, add, add2)
orm.SetTable("userinfo").Insert(addslice)

Join Table

a, _ := orm.SetTable("userinfo").Join("LEFT", "userdeatail", "userinfo.uid=userdeatail.uid").Where("userinfo.uid=?", 1).Select("userinfo.uid,userinfo.username,userdeatail.profile").FindMap()

Group By And Having

a, _ := orm.SetTable("userinfo").GroupBy("username").Having("username='astaxie'").FindMap()

Nesting Models (inline)

type SQLModel struct {
	Id       int       `beedb:"PK" sql:"id"`
	Created  time.Time `sql:"created"`
	Modified time.Time `sql:"modified"`
}
type User struct {
	SQLModel `sql:",inline"`
	Name     string `sql:"name" tname:"fn_group"`
	Auth     int    `sql:"auth"`
}
// the SQL table has the columns: id, name, auth, created, modified
// They are marshalled and unmarshalled automatically because of the inline keyword

LICENSE

BSD License
http://creativecommons.org/licenses/BSD/

主要指标

概览
名称与所有者astaxie/beedb
主编程语言Go
编程语言Go (语言数: 1)
平台
许可证
所有者活动
创建于2012-05-09 14:58:22
推送于2014-12-21 13:02:23
最后一次提交2014-12-21 21:02:23
发布数0
用户参与
星数706
关注者数63
派生数166
提交数72
已启用问题?
问题数38
打开的问题数25
拉请求数22
打开的拉请求数0
关闭的拉请求数3
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?