ORM使用

ORM的使用方法

ORM的使用有两种:QuerySeter和RawSeter。对于QuerySeter,需要在orm中注册模型。而如果直接使用原生的sql,则不需要。所以,我们一般只使用原生的sql查询。

QuerySeter的使用可以参考文档 beego.me

本文只介绍RawSeter的使用,请先看《最佳实践》小节的内容。

数据库的设置

导入包

目前 ORM 支持三种数据库,以下为测试过的 driver。将你需要使用的 driver 加入 import 中

import (
    _ "github.com/go-sql-driver/mysql"
    _ "github.com/lib/pq"
    _ "github.com/mattn/go-sqlite3"
)

RegisterDriver

orm.RegisterDriver("mysql", orm.DRMySQL)

三种默认数据库类型

// For version 1.6
orm.DRMySQL
orm.DRSqlite
orm.DRPostgres

// < 1.6
orm.DR_MySQL
orm.DR_Sqlite
orm.DR_Postgres

RegistrerDatabase

ORM 必须注册一个别名为 default 的数据库,作为默认使用。

orm.RegisterDataBase("default", "mysql", "root:root@tcp(192.168.1.1:3306)/orm_test?charset=utf8")

可以注册多个数据库,然后在不同的数据库之间切换

orm.RegisterDataBase("default", "mysql", "root:root@tcp(192.168.1.1:3306)/orm_test?charset=utf8")
orm.RegisterDataBase("db1", "mysql", "root:root@tcp(192.168.1.2:3306)/orm_test?charset=utf8")

ormer := orm.NewOrmer()
ormer.Using("db1")    # 如果没有显示Using,则默认使用default

ORM接口使用

创建一个ormer

var o Ormer
o = orm.NewOrm() // 创建一个 Ormer

Ormer的接口定义如下:

type Ormer interface {
    Read(interface{}, …string) error
    ReadOrCreate(interface{}, string, …string) (bool, int64, error)
    Insert(interface{}) (int64, error)
    InsertMulti(int, interface{}) (int64, error)
    Update(interface{}, …string) (int64, error)
    Delete(interface{}) (int64, error)
    LoadRelated(interface{}, string, …interface{}) (int64, error)
    QueryM2M(interface{}, string) QueryM2Mer
    QueryTable(interface{}) QuerySeter
    Using(string) error
    Begin() error
    Commit() error
    Rollback() error
    Raw(string, …interface{}) RawSeter
    Driver() Driver
}

Last updated

Was this helpful?