Go語言:orm ablegao/orm

e73b 9年前發布 | 15K 次閱讀 Go語言 持久層框架

一個好用直觀的 數據庫操作ORM 

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

例子

//引用模塊
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()



//delete
user.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()

項目主頁:http://www.baiduhome.net/lib/view/home/1420117106406

 本文由用戶 e73b 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!