go语言orm之gorose全新版本2.0低调发布

栏目: Go · 发布时间: 4年前

内容简介:号称go语言版本的laravel's eloquent, 发布了久违了2.0版本, 新版本做了很大的改进和升级, 下面我们一起来看一下新版本的特性.gorose 2.0版本做了彻底的重构, 拥有全新的架构. 架构如图:

号称 go 语言版本的laravel's eloquent, 发布了久违了2.0版本, 新版本做了很大的改进和升级, 下面我们一起来看一下新版本的特性.

架构调整

gorose 2.0版本做了彻底的重构, 拥有全新的架构. 架构如图:

go语言orm之gorose全新版本2.0低调发布

gorose 2.0 采用模块化架构, 通过interface的api通信,严格的上层依赖下层.每一个模块都可以拆卸, 甚至可以自定义为自己喜欢的样子.

  • 主模块

    • engin
gorose 初始化配置模块, 可以全局保存并复用
- session  
真正操作数据库底层模块, 所有的操作, 最终都会走到这里来获取或修改数据  
- orm  
对象关系映射模块, 所有的orm操作, 都在这里完成  
- builder  
构建终极执行的 sql 模块, 可以构建任何数据库的sql, 但要符合`database/sql`包的接口
  • 子模块

    • driver
数据库驱动模块, 被engin和builder依赖, 根据驱动来搞事情  
- binder  
结果集绑定模块, 所有的返回结果集都在这里

其他语言入手姿势

laravel
orator orm
rails

支持驱动

mysql : https://github.com/go-sql-dri...

sqlite3 : https://github.com/mattn/go-s...

postgres : https://github.com/lib/pq

oracle : https://github.com/mattn/go-oci8

mssql : https://github.com/denisenkom...

clickhouse : https://github.com/kshvakov/c...

特色

  • 连接池
  • 链式调用
  • 支持传入struct,map或字符串表名
  • 读写分离集群支持
  • 海量数据自动分块处理
  • 一键开启事务,自动回滚和提交
  • 模块化架构,自由扩展

官方文档

最新版2.x文档

api预览

db.Table().Fields().Where().GroupBy().Having().OrderBy.Limit().Select()
db.Table().Data().Insert()
db.Table().Data().Where().Update()
db.Table().Where().Delete()

最佳实践

sql

DROP TABLE IF EXISTS "users";
CREATE TABLE "users" (
     "uid" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
     "name" TEXT NOT NULL,
     "age" integer NOT NULL
);

INSERT INTO "users" VALUES (1, 'gorose', 18);
INSERT INTO "users" VALUES (2, 'goroom', 18);
INSERT INTO "users" VALUES (3, 'fizzday', 18);

实战代码

package main

import (
    "fmt"
    "github.com/gohouse/gorose"
    _ "github.com/mattn/go-sqlite3"
)

type Users struct {
    Uid int64 `gorose:"uid"`
    Name string `gorose:"name"`
    Age int64 `gorose:"age"`
    Xxx interface{} `gorose:"ignore"` // 这个字段在orm中会忽略
}

func (u *Users) TableName() string {
    return "users"
}

var err error
var engin *gorose.Engin

func init() {
    // 全局初始化数据库,并复用
    // 这里的engin需要全局保存,可以用全局变量,也可以用单例
    // 配置&gorose.Config{}是单一数据库配置
    // 如果配置读写分离集群,则使用&gorose.ConfigCluster{}
    engin, err = gorose.Open(&gorose.Config{Driver: "sqlite3", Dsn: "./db.sqlite"})
}
func DB() gorose.IOrm {
    return engin.NewOrm()
}
func main() {
    // 这里定义一个变量db, 是为了复用db对象, 可以在最后使用 db.LastSql() 获取最后执行的sql
    // 如果不复用 db, 而是直接使用 DB(), 则会新建一个orm对象, 每一次都是全新的对象
    // 所以复用 db, 一定要在当前会话周期内
    db := DB()
    // 这里的对象是map, 所以需要初始化(var u = user{}), 不能像struct那样, 可以直接 `var u Users`
    var u = Users{}
    var count int64
    // 统计数据
    count,err = db.Table(&u).Fields("uid,name,age").Where("age",">",0).OrderBy("uid desc").Limit(10).Offset(1).Count()
    if err!=nil {
        fmt.Println(err)
    }
    // 查询数据并绑定到 user{} 上, 这里复用了 db 及上下文条件参数
    // 如果不想复用,则可以使用DB()就会开启全新会话,或者使用db.Reset()
    // db.Reset()只会清除上下文参数干扰,不回更换链接,DB()则会更换链接
    err = db.Select()
    
    fmt.Println(count)
    fmt.Println(u, u.Name.String())
    fmt.Println(db.LastSql())
}

官方网站

https://github.com/gohouse/gorose

官方qq群: 470809220,点击加入


以上所述就是小编给大家介绍的《go语言orm之gorose全新版本2.0低调发布》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical Algorithms for Programmers

Practical Algorithms for Programmers

Andrew Binstock、John Rex / Addison-Wesley Professional / 1995-06-29 / USD 39.99

Most algorithm books today are either academic textbooks or rehashes of the same tired set of algorithms. Practical Algorithms for Programmers is the first book to give complete code implementations o......一起来看看 《Practical Algorithms for Programmers》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试