分享
  1. 首页
  2. 文章

一个新颖简便的golang orm . 容易比较容易上手。

Able · · 25580 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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()
//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()

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


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
25580 次点击
1 回复 | 直到 2018年05月23日 11:13:40
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏