Skip to content

Latest commit

 

History

History
118 lines (95 loc) · 3.62 KB

method.md

File metadata and controls

118 lines (95 loc) · 3.62 KB

[TOC]

数据库操作

ORM方法操作相对链式操作更偏底层操作一些,在项目开发中常用链式操作,因为链式操作更简单灵活,但链式操作执行不了太过于复杂的SQL操作,可以交给方法操作来处理。

方法操作

// SQL操作方法,返回原生的标准库sql对象
Query(query string, args ...interface{}) (*sql.Rows, error)
Exec(query string, args ...interface{}) (sql.Result, error)
Prepare(query string) (*sql.Stmt, error)

// 数据表记录查询:
// 查询单条记录、查询多条记录、获取记录对象、查询单个字段值(链式操作同理)
GetAll(query string, args ...interface{}) (Result, error)
GetOne(query string, args ...interface{}) (Record, error)
GetStruct(obj interface{}, query string, args ...interface{}) error
GetValue(query string, args ...interface{}) (Value, error)
Select(tables, fields string, condition interface{}, groupBy, orderBy string, first, limit int, args ...interface{}) (Result, error)

// 开启事务操作
Begin() (*Tx, error)

// 数据单条操作
Insert(table string, data Map) (sql.Result, error)
Replace(table string, data Map) (sql.Result, error)
Save(table string, data Map) (sql.Result, error)

// 数据批量操作
BatchInsert(table string, list List, batch int) (sql.Result, error)
BatchReplace(table string, list List, batch int) (sql.Result, error)
BatchSave(table string, list List, batch int) (sql.Result, error)

// 数据修改/删除
Update(table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
Delete(table string, condition interface{}, args ...interface{}) (sql.Result, error)

// 创建链式操作对象(Table为From的别名)
Table(tables string) (*Model)
From(tables string) (*Model)
    
// 关闭数据库
Close() error

操作示例

  1. ORM对象

    // 获取默认配置的数据库对象(配置名称为"default")
    db, err := gdb.New()
    // 或者
    db := g.Database()
    // 或者(别名方式)
    db := g.DB()
    
    // 获取配置分组名称为"user-center"的数据库对象
    db, err := gdb.New("user-center")
    // 或者 
    db := g.Database("user-center")
    // 或者 (别名方式)
    db := g.DB("user-center")
    
    // 注意不用的时候不需要使用Close方法关闭数据库连接(并且gdb也没有提供Close方法),
    // 数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭
  2. 数据写入

    r, err := db.Insert("user", gdb.Map {
        "name": "john",
    })
  3. 数据查询(列表)

    list, err := db.GetAll("select * from user limit 2")
    list, err := db.Select("user", "*", nil, "", "", 0, 2)
  4. 数据查询(单条)

    one, err := db.GetOne("select * from user limit 2")
    // 或者
    one, err := db.GetOne("select * from user where uid=1000")
  5. 数据保存

    r, err := db.Save("user", gdb.Map {
        "uid"  :  1,
        "name" : "john",
    })
  6. 批量操作

    // BatchInsert/BatchReplace/BatchSave 同理
    _, err := db.BatchInsert("user", gdb.List {
        {"name": "john_1"},
        {"name": "john_2"},
        {"name": "john_3"},
        {"name": "john_4"},
    }, 10)
  7. 数据更新/删除

    // db.Update/db.Delete 同理
    r, err := db.Update("user", gdb.Map {"name": "john"}, "uid=?", 10000)
    r, err := db.Update("user", "name='john'", "uid=10000")
    r, err := db.Update("user", "name=?", "uid=?", "john", 10000)

    注意,参数域支持并建议使用预处理模式进行输入,避免SQL注入风险。