這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
About
一個資料庫ORM.
How to use?
Insert
go get github.com/ablegao/orm
例子
//引用模組import "github.com/ablegao/orm"//mysql 驅動import _ "github.com/go-sql-driver/mysql"//建立串連 // 參數分別為 名稱 , 驅動, 連接字串// 註:必須包含一個default 串連, 作為預設串連。orm.NewDatabase("default" , "mysql" , "user:passwd@ip/database?charset=utf8")//建立一個資料模型。 type UserInfo struct { orm.Object Id int64 `field:"id" auto:"true" index:"pk"` Name string `field:"username"` Passwd string `field:"password"`}//資料庫表名稱func(self *UserInfo) GetTableName()string{ return "database.user_info"}//查詢一個使用者名稱為 "test1"的賬戶 user:=new(UserInfo)err:=user.Objects(user).Filter("Name","test1").One()fmt.Println(user.Id , user.Passwd , user.Name)//Update user.Name="test2"user.Objects(user).Save()// or user.Objects(user).Filter("Id" , 1).Change("Name" , "test2").Save()//查詢id小於10的所有資料users , err:=user.Objects(user).Filter("Id__lt",10).All()if err == nil { for _,userinfo:= range users{ u:=userinfo.(*UserInfo) fmt.Println(u.Id , u.Passwd , u.Name) }}//Create user:=new(UserInfo)user.Name ="test1"user.Passwd ="123456"id , err:=user.Objects(user).Save()//deleteuser.Objects(user).Delete()// User other Database connect orm.NewDatabase("other" , "mysql" , "user:passwd@ip/database?charset=utf8")user.Objects(user).Db("other").Filter(x ,x).Delete()// or user.Objects(user).Filter().Db("other").XXX()
Filter or FilterOr
.Filter(fieldname , val )
Filter 作為orm 的主要作用是過濾查詢條件, 最終將會轉換為sql 語句中的where 條件陳述式。 可以填寫多次, 多次資料為and 關係
FilterOr 作為Orm 的主要過濾查詢條件, 最終將妝化為sql 語句的where 條件陳述式 , 可以填寫多次, 多次資料以 or 串連
user.Objects(user).Filter(“Name” , “test1”).FilterOr(“Name” , “test2”).All()
//select id,username,passwd from database.user_info where username='test1' or username='test2'
關於Filter欄位的魔法參數
目前支援:
__exact 精確等於 like 'aaa' __iexact 精確等於 忽略大小寫 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小寫 ilike '%aaa%',但是對於sqlite來說,contains的作用效果等同於icontains。__gt 大於__gte 大於等於__ne 不等於__lt 小於__lte 小於等於__startswith 以...開頭__istartswith 以...開頭 忽略大小寫__endswith 以...結尾__iendswith 以...結尾,忽略大小寫
尚未支援:
__in 存在於一個list範圍內__range 在...範圍內__year 日期欄位的年份__month 日期欄位的月份__day 日期欄位的日__isnull=True/False
Change
修改資料, 執行時,相當於 sql 語句中的set
傳入一個結構欄位 和值
.Change(“Field” , 1)
update from xxx set field=1
可以添加魔法參數:
.Change(“Field__add” ,1 )
update from xxx set field=field+1
add 累加 field=field+1
sub 累減 field=field-1
mult 累乘 field=field*1
div 累計出發 field=field/1