orm

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2024 License: Apache-2.0 Imports: 0 Imported by: 0

README

Morm

混合ORM(Mixed orm),配置数据源源即可轻松访问不同类型的数据库,目前支持mysqlmongodb,底层使用gormmongo-driver实现。

配置文件使用viper进行解析

配置文件参考

[db]
log = './db.log'    # 日志文件路径
loglevel = '4'  # 日志等级 
type = 'mysql' # 默认orm类型

[mongodb]
# mongodb连接的数据库
database = 'testorm'    
# 连接池大小
option_pool_size = '200'   
# mongodb代理连接方法
proxy = 'socks5://127.0.0.1:7890'  
# mongodb连接uri mongodb://[认证用户名]:[认证密码]@[连接地址]/[额外参数]
uri = 'mongodb://mgouser:mgopass@127.0.0.1:27027/?authSource=admin' 

[mysql]
# mysql连接数据库
database = 'testorm'
# 数据库编码
charset = 'utf8mb4'
# 连接最大生命时间
conn_max_lifetime = '1h'
# mysql连接主机
host = '127.0.0.1'
# mysql连接端口
port = '3306'
# 最大空闲连接数
max_idle_conns = '10'
# 最大连接数
max_open_conns = '100'
# mysql认证用户
user = 'orm'
# mysql认证密码
password = 'password'

使用案例

import (
    "github.com/lfhy/morm"
    "github.com/lfhy/morm/db"
)

// 数据库结构体
// 如果数据在mongo需要按mongo-driver进行标注
// 在其他gorm的(mysql,sqlite)按gorm进行标注
type DBSturct struct {
    ID string `bson:"_id" gorm:"id"`
    Name string `bson:"name" gorm:"name"`
}

// 表名或集合名
func (DBSturct) TableName() string {
    return "dbtable"
}

func main() {
    // 初始化配置文件
    configPath := "/path/to/config.toml"
    err := db.InitORMConfig(configPath)
    if err != nil {
        fmt.Printf("配置文件加载错误:%v\n", err)
        panic(err)
    }
    // 使用自定义日志:db.SetLogger
    // 数据库初始化
    _ , err = db.Init()
    if err != nil {
        fmt.Printf("数据库初始化失败:%v\n", err)
        panic(err)
    }

    // 创建查询
    var db DBSturct
    db.ID = "123"
    err = morm.Model(&db).Find().One(&db)
    if err != nil {
        fmt.Printf("查询失败:%v\n", err)
        return
    }
    fmt.Printf("查询结果:%+v\n", db)
}

TODO

  • 支持sqlite
  • 添加测试案例

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Page

func Page(m *ORMModel, page, limit int)

分页

Types

type BoolORM

type BoolORM int

为了避免识别错误设置Bool类型为int类型

const (
	TrueInt  BoolORM = 1
	FalseInt BoolORM = -1
	// 空字符串
	EmptyStr = "-"
)

type ORM

type ORM interface {
	// Model用于返回Orm模型 用于之后对模型的操作
	Model(data interface{}) ORMModel
}

type ORMModel

type ORMModel interface {
	// 插入数据
	// 返回ID和错误
	// 传入的必须是结构体指针才可以修改原始数据
	Create(data interface{}) (string, error)

	// 更新或插入数据
	// 返回ID和错误
	// 传入的必须是结构体指针才可以修改原始数据
	Save(data interface{}) (string, error)

	// 更新
	// 返回错误 考虑更新可能更新多条 不返回ID
	// 传入的必须是结构体指针才可以修改原始数据
	Update(data interface{}) error

	// 删除
	Delete(data interface{}) error

	// 查询数据
	// 会根据限制条件生成查询函数
	// 具体查询执行需要在查询函数中进行
	Find() ORMQuary

	// 过滤条件
	// Where只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// 传入Where(&User{ID:123}) 会生成 WHERE User.ID = 123
	Where(condition interface{}) ORMModel

	// WhereIs传入 key和value 根据生成表达式
	WhereIs(key string, value any) ORMModel

	// WhereNot只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// 传入WhereNot(&User{ID:123}) 会生成 WHERE User.ID <> 123
	WhereNot(condition interface{}) ORMModel

	// WhereGt只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// 传入WhereGt(&User{ID:123}) 会生成 WHERE User.ID > 123
	WhereGt(condition interface{}) ORMModel

	// WhereLt只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// 传入WhereLt(&User{ID:123}) 会生成 WHERE User.ID < 123
	WhereLt(condition interface{}) ORMModel

	// WhereOr只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// 传入Where(&User{ID:12}).WhereOr(&User{ID:123}) 会生成 WHERE User.ID = 12 OR User.ID = 123
	WhereOr(condition interface{}) ORMModel

	// 限制查询的数量
	Limit(limit int) ORMModel

	// 跳过查询个数
	// 传入3 则会跳过前3个结果从第4个结果开始取
	// 需要配合Limit使用
	Offset(offset int) ORMModel

	// 正序
	// 传入结构体会根据结构体第一个有值的对象进行正序排序
	// 如传入Asc(&User{ID:1}) 就会根据User.ID进行排序 ID值不会处理但是要排序的必须有值 且只会根据第一个有值对象进行排序
	Asc(condition interface{}) ORMModel

	// 逆序
	// 传入结构体会根据结构体第一个有值的对象进行倒序排序
	// 如传入Desc(&User{ID:1}) 就会根据User.ID进行排序 ID值不会处理但是要排序的必须有值 且只会根据第一个有值对象进行排序
	Desc(condition interface{}) ORMModel

	// 分页
	Page(page, limit int) ORMModel
}

type ORMQuary

type ORMQuary interface {
	// 最后查询一条数据
	One(data interface{}) error
	// 查询全部数据
	All(data interface{}) error
	// 返回查询个数
	Count() (int64, error)
}

Directories

Path Synopsis
db

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL