mworm

package module
v0.3.40 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 2025 License: MIT Imports: 17 Imported by: 0

README

mworm

go postgresql orm

mworm 方法示例

以下是 mworm 项目常用方法的使用示例:

1. 分页查询

// 定义实体结构体
 type User struct {
     ID   int    `json:"id" db:"id"`
     Name string `json:"name" db:"name"`
 }

// 分页查询,排除 json tag 字段
result, err := mworm.PAGE(User{}, 1, 10, []string{"password"}, mworm.And("name"))
if err != nil {
    // 错误处理
}
fmt.Println(result.List)

2. 条件构造

// 构造 AND 条件
cond := mworm.And("name", "age")
// 构造 OR 条件
cond := mworm.Or("status")
// 构造 IN 条件
cond := mworm.IN("id", 1, 2, 3)
// 构造 LIKE 条件
cond := mworm.Like("name")
// 构造 NULL 条件
cond := mworm.IsNull("deleted_at")
// 构造比较条件
cond := mworm.Gt("age", 18)  // 大于
cond := mworm.Gte("age", 18) // 大于等于
cond := mworm.Lt("age", 30)  // 小于
cond := mworm.Lte("age", 30) // 小于等于
cond := mworm.Eq("status", 1) // 等于

3. 单条/多条查询

// 单条查询
orm := mworm.SELECT(User{})
var user User
err := orm.Where(mworm.And("id")).One(&user)

// 多条查询
var users []User
err := orm.Where(mworm.And("status")).Many(&users)

// 组合多个条件查询
err := orm.Where(
    mworm.And("status"),
    mworm.Gt("age", 18),
    mworm.Like("name"),
).Many(&users)

4. 插入/更新/删除

// 插入
orm := mworm.INSERT(User{ID: 1, Name: "Tom"})
err := orm.Exec()

// 更新
orm := mworm.UPDATE(User{ID: 1, Name: "Jerry"})
err := orm.Where(mworm.And("id")).Exec()

// 更新指定字段
orm := mworm.UPDATE(User{})
err := orm.SetField("name", "Tom").
    SetField("age", 20).
    Where(mworm.And("id")).
    Exec()

// 删除
orm := mworm.DELETE(User{})
err := orm.Where(mworm.And("id")).Exec()

5. 排序与分页

// 排序
orm := mworm.SELECT(User{}).
    Asc("name").     // 按 name 升序
    Desc("id")       // 按 id 降序

// 分页
orm := mworm.SELECT(User{}).
    Limit(10).       // 限制返回 10 条
    Offset(0)        // 从第 0 条开始

// 组合使用
var users []User
err := orm.SELECT(User{}).
    Where(mworm.And("status")).
    Asc("name").
    Limit(10).
    Offset(0).
    Many(&users)

6. 原生 SQL 查询

// 直接执行 SQL
orm := mworm.RawSQL("SELECT * FROM users WHERE status = 'active'")
var users []User
err := orm.Many(&users)

// 带参数的原生 SQL
params := map[string]interface{}{
    "status": "active",
    "age": 18,
}
orm := mworm.RawNamedSQL("SELECT * FROM users WHERE status = :status AND age > :age", params)
err := orm.Many(&users)

7. 关联查询

// WITH 查询
orm := mworm.SELECT(User{}).
    With("orders").                    // 关联 orders 表
    WithAsc("created_at")             // orders 表按 created_at 升序

// JsonbMap 查询
var result map[string]User
err := orm.JsonbMap(&result, "id", "name")

// JsonbList 查询
var users []User
err := orm.JsonbList(&users)

8. 高级功能

// 批量操作
err := mworm.Batch(
    mworm.INSERT(User{Name: "Tom"}),
    mworm.UPDATE(User{}).Where(mworm.And("id")),
    mworm.DELETE(User{}).Where(mworm.And("status")),
)

// 事务操作
err := mworm.BatchFunc(func(tx *sqlx.Tx) {
    // 在事务中执行操作
})

// 调试 SQL
orm := mworm.SELECT(User{}).Log(true)  // 打印 SQL 语句

9. 字段过滤

// 指定查询字段
orm := mworm.SELECT(User{}).
    Fields("id", "name")    // 只查询 id 和 name 字段

// 排除字段
orm := mworm.SELECT(User{}).
    ExcludeFields("password", "salt")   // 排除 password 和 salt 字段

初始化配置

// 连接数据库
db, err := sqlx.Connect("postgres", "postgres://user:password@localhost:5432/dbname?sslmode=disable")
if err != nil {
    log.Fatal(err)
}
err = mworm.BindDB(db)
if err != nil {
    log.Fatal(err)
}

更多用法请参考源码注释和接口定义。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// SqlxDB 数据库连接对象
	SqlxDB *sqlx.DB
	// TagName 结构体 tag 名称
	TagName   = "db"
	DebugMode bool
)
View Source
var (
	ErrInvalidPageSize = &Error{Code: 1001, Message: "page size must be greater than zero"}
	ErrNilDB           = &Error{Code: 1002, Message: "database connection is nil"}
	ErrEmptySQL        = &Error{Code: 1003, Message: "SQL statement is empty"}
	ErrNoEffect        = &Error{Code: 1004, Message: "no rows affected"}
)

定义常见错误

Functions

func Batch

func Batch(ormArray ...*OrmModel) error

Batch 批量插入/更新

func BatchArray

func BatchArray(ormArray []*OrmModel) error

BatchArray 批量插入/更新

func BatchFunc

func BatchFunc(f func(tx *sqlx.Tx)) error

BatchFunc 批量操作

func BindDB

func BindDB(DB *sqlx.DB) error

BindDB 绑定数据库

func ConvertArray added in v0.1.6

func ConvertArray[T int | string](array []T) []string

func Exec added in v0.3.8

func Exec(sqlStr string) error

Exec 执行带命名参数的 SQL 语句

func ExecRawSQL added in v0.2.0

func ExecRawSQL(sql string, args ...any) error

ExecRawSQL 执行原生 SQL

func JsonTagToJsonbKeys added in v0.3.7

func JsonTagToJsonbKeys(obj interface{}, prefix string, igTags ...string) string

func JsonbBuildObjString added in v0.2.8

func JsonbBuildObjString(obj interface{}, prefix ...string) string

func NamedExec

func NamedExec(sqlStr string, params map[string]interface{}) error

NamedExec 执行带命名参数的 SQL 语句

func NamedQuery added in v0.1.4

func NamedQuery(query string, params any, dest any) error

NamedQuery 执行带命名参数的 SQL 查询并映射结果

func NamedQueryWithMap added in v0.3.1

func NamedQueryWithMap(query string, fieldMap map[string]any, dest any) error

NamedQueryWithMap 执行带命名参数的 SQL 查询并映射结果

func Query added in v0.1.4

func Query(query string, dest any) error

func StructToMap

func StructToMap(item any) (map[string]any, map[string]string)

func ValueTypeToStr added in v0.3.3

func ValueTypeToStr(v any) string

Types

type CRUDInterface

type CRUDInterface interface {
	CRUDMode(mode string) string
}

type ConditionGroup

type ConditionGroup struct {
	Logic    string   // Logic: 逻辑运算符(AND/OR)
	Symbol   string   // Symbol: 比较符号(=, >, < 等)
	JsonTags []string // JsonTags: 参与条件的字段名
	Args     []any    // Args: 参数值
	InArgs   []string // InArgs: IN 查询参数
	Express  string   // Express: 表达式
	// contains filtered or unexported fields
}

ConditionGroup 条件分组结构体,描述 SQL 查询的条件

func And

func And(tag ...string) ConditionGroup

And 构造 AND 非零条件分组

func And2F

func And2F(tag string, arg any) ConditionGroup

And2F 构造 AND 单字段条件分组

func AndAuto added in v0.3.24

func AndAuto(tag ...string) ConditionGroup

AndAuto 构造 AND 值为空时该条件移除

func Asc added in v0.3.1

func Asc(tag string) ConditionGroup

Asc 构造升序条件分组

func AutoFill added in v0.3.3

func AutoFill(zero ...bool) ConditionGroup

AutoFill 自动填充条件分组

func Desc added in v0.3.1

func Desc(tag string) ConditionGroup

Desc 构造降序条件分组

func Eq added in v0.3.3

func Eq(tag string, args ...any) ConditionGroup

Eq 构造等于条件分组

func Exp

func Exp(express string, args ...any) ConditionGroup

Exp 条件表达式 {table_column_field}=:{name}

func Fields added in v0.3.39

func Fields(tag ...string) ConditionGroup

func Gt added in v0.3.3

func Gt(tag string, args ...any) ConditionGroup

Gt 构造大于条件分组

func Gte added in v0.3.3

func Gte(tag string, args ...any) ConditionGroup

Gte 构造大于等于条件分组

func IN

func IN[T int | string](tag string, args ...T) ConditionGroup

IN 构造 IN 查询条件分组

func JoinOn added in v0.3.8

func JoinOn(express string) ConditionGroup

JoinOn 创建 JOIN ON 条件

func Like added in v0.3.1

func Like(tag ...string) ConditionGroup

Like 构造 AND LIKE 条件分组

func LikeOR added in v0.3.3

func LikeOR(tag ...string) ConditionGroup

LikeOR 构造 OR LIKE 条件分组

func Lt added in v0.3.3

func Lt(tag string, args ...any) ConditionGroup

Lt 构造小于条件分组

func Lte added in v0.3.3

func Lte(tag string, args ...any) ConditionGroup

Lte 构造小于等于条件分组

func NEq added in v0.3.25

func NEq(tag string, args ...any) ConditionGroup

NEq 不等于

func NEqLike added in v0.3.25

func NEqLike(tag ...string) ConditionGroup

NEqLike 构造 AND LIKE != 条件分组

func NEqNull added in v0.3.25

func NEqNull(tag ...string) ConditionGroup

NEqNull 不等于空 And

func Null added in v0.3.25

func Null(tag ...string) ConditionGroup

Null 是否为空 And

func NullOR added in v0.3.25

func NullOR(tag ...string) ConditionGroup

NullOR 不等于空 OR

func Or

func Or(tag ...string) ConditionGroup

Or 构造 OR 非零条件分组

func Or2F

func Or2F(tag string, args ...any) ConditionGroup

Or2F 构造 OR 单字段条件分组

func OrAuto added in v0.3.24

func OrAuto(tag ...string) ConditionGroup

OrAuto 构造 OR 值为空时该条件移除

func Raw added in v0.3.15

func Raw(express string, args ...any) ConditionGroup

Raw 条件表达式 column1 = 2 AND column2 = 'abc' 或 column1 = $1 AND column2 = $2

func (ConditionGroup) Transform

func (cg ConditionGroup) Transform() string

Transform 转换为 SQL 字符串(未实现)

type ConditionType added in v0.3.1

type ConditionType int // ConditionType 条件类型枚举

type Error added in v0.3.8

type Error struct {
	Code    int    // 错误码
	Message string // 错误信息
	SQL     string // SQL语句
}

Error 包含了详细的错误信息

func (Error) Error added in v0.3.8

func (e Error) Error() string

type JoinTable added in v0.3.8

type JoinTable struct {
	Type        JoinType         // JOIN 类型
	Table       string           // 表名
	Alias       string           // 表别名
	Conditions  []ConditionGroup // JOIN 条件
	SelectField []string         // 需要查询的字段
}

JoinTable 连接表的结构

func (*JoinTable) SelectFields added in v0.3.8

func (j *JoinTable) SelectFields(fields ...string) *JoinTable

SelectFields 设置需要查询的字段

type JoinType added in v0.3.8

type JoinType int

JoinType 连接类型

const (
	InnerJoin JoinType = iota // INNER JOIN
	LeftJoin                  // LEFT JOIN
	RightJoin                 // RIGHT JOIN
)

func (JoinType) String added in v0.3.8

func (j JoinType) String() string

String 返回 JOIN 类型的字符串表示

type ORMInterface

type ORMInterface interface {
	TableName() string
}

ORMInterface 数据库表结构体接口,需实现 TableName 方法 CRUDInterface 数据库操作接口,需实现 CRUDMode 方法

type OrmModel

type OrmModel struct {
	// contains filtered or unexported fields
}

func DELETE

func DELETE(i ORMInterface) *OrmModel

DELETE 删除

func INSERT

func INSERT(i ORMInterface) *OrmModel

INSERT 插入

func O added in v0.1.4

func O() *OrmModel

func RawNamedSQL added in v0.1.18

func RawNamedSQL(sql string, params any) *OrmModel

func RawSQL

func RawSQL(sql string) *OrmModel

RawSQL 原生 SQL 查询

func SELECT

func SELECT(i ORMInterface, distinct ...bool) *OrmModel

SELECT 查询

func Table

func Table(name string) *OrmModel

Table 指定表名

func UPDATE

func UPDATE(i ORMInterface) *OrmModel

UPDATE 更新

func (*OrmModel) AllowEmpty added in v0.3.12

func (o *OrmModel) AllowEmpty(jsonTag ...string) *OrmModel

func (*OrmModel) Asc

func (o *OrmModel) Asc(jsonTag ...string) *OrmModel

func (*OrmModel) BuildSQL added in v0.3.10

func (o *OrmModel) BuildSQL() SQLParams

BuildSQL 构造带命名参数的 SQL 语句

func (*OrmModel) Count

func (o *OrmModel) Count(column string) (int64, error)

Count 统计数量

func (*OrmModel) Delete

func (o *OrmModel) Delete(i interface{}) *OrmModel

func (*OrmModel) Desc

func (o *OrmModel) Desc(jsonTag ...string) *OrmModel

func (*OrmModel) Error

func (o *OrmModel) Error() error

func (*OrmModel) ExcludeFields added in v0.1.17

func (o *OrmModel) ExcludeFields(jsonTag ...string) *OrmModel

func (*OrmModel) Exec

func (o *OrmModel) Exec() error

Exec 执行由 OrmModel 生成的 SQL 查询,并在出现错误时返回错误。

该函数不接受任何参数。 它返回一个错误。

func (*OrmModel) Fields

func (o *OrmModel) Fields(jsonTag ...string) *OrmModel

func (*OrmModel) FullSQL added in v0.2.3

func (o *OrmModel) FullSQL() SQLParams

FullSQL SQL+WithSQL

func (*OrmModel) GroupBy added in v0.3.39

func (o *OrmModel) GroupBy(cgs ...ConditionGroup) *OrmModel

func (*OrmModel) Having added in v0.3.39

func (o *OrmModel) Having(exp string, args ...any) *OrmModel

func (*OrmModel) If

func (o *OrmModel) If(ifFunc func(o *OrmModel)) *OrmModel

func (*OrmModel) Insert

func (o *OrmModel) Insert(i interface{}) *OrmModel

func (*OrmModel) Join added in v0.3.8

func (o *OrmModel) Join(i ORMInterface) *OrmModel

Join 添加连接表

func (*OrmModel) JsonbList

func (o *OrmModel) JsonbList(dest interface{}) error

func (*OrmModel) JsonbListString

func (o *OrmModel) JsonbListString() (string, error)

func (*OrmModel) JsonbMap

func (o *OrmModel) JsonbMap(dest interface{}, columns ...string) error

func (*OrmModel) JsonbMapString

func (o *OrmModel) JsonbMapString(keys ...string) (string, error)

func (*OrmModel) Limit

func (o *OrmModel) Limit(row int64) *OrmModel

func (*OrmModel) Log

func (o *OrmModel) Log(l bool) *OrmModel

func (*OrmModel) Many added in v0.1.18

func (o *OrmModel) Many(dest interface{}) error

Many 查询多条记录

func (*OrmModel) Offset

func (o *OrmModel) Offset(row int64) *OrmModel

func (*OrmModel) One added in v0.1.18

func (o *OrmModel) One(dest interface{}) error

One 查询单条记录

func (*OrmModel) RETURNING

func (o *OrmModel) RETURNING(single any, list any, jsonTag ...string) error

func (*OrmModel) Select

func (o *OrmModel) Select(i interface{}, distinct ...bool) *OrmModel

func (*OrmModel) SetField added in v0.1.11

func (o *OrmModel) SetField(jsonTag string, arg any) *OrmModel

SetField UPDATE 设置字段值

func (*OrmModel) Update

func (o *OrmModel) Update(i interface{}) *OrmModel

func (*OrmModel) Where

func (o *OrmModel) Where(cgs ...ConditionGroup) *OrmModel

func (*OrmModel) WherePK

func (o *OrmModel) WherePK() *OrmModel

WherePK 使用dbTag里包含pk字符的jsonTag的字段进行查询。 db:"columnName,pk"

func (*OrmModel) With

func (o *OrmModel) With(t string) *OrmModel

With 关联查询

func (*OrmModel) WithAsc

func (o *OrmModel) WithAsc(fields ...string) *OrmModel

func (*OrmModel) WithDesc

func (o *OrmModel) WithDesc(fields ...string) *OrmModel

type PageResult added in v0.3.1

type PageResult[T any] struct {
	Total     int `json:"total" db:"total"`          //总记录数
	TotalPage int `json:"totalPage" db:"total_page"` //总页数
	Page      int `json:"page" db:"page"`            //当前页
	PageSize  int `json:"pageSize" db:"page_size"`   //页面数量
	List      []T `json:"list" db:"list"`            //分页数据
}

PageResult 用于分页查询结果的结构体,包含总数、总页数、当前页、每页数量和数据列表。

func DebugPAGE added in v0.3.3

func DebugPAGE[T ORMInterface](entity T, debug bool, page, pageSize int, excludeTags []string, cgs ...ConditionGroup) (PageResult[T], error)

DebugPAGE 分页查询方法,支持调试和排除指定的json tag字段

func PAGE added in v0.3.1

func PAGE[T ORMInterface](entity T, page, pageSize int, excludeTags []string, cgs ...ConditionGroup) (PageResult[T], error)

PAGE 分页查询方法,支持排除指定的json tag字段

func (PageResult[T]) CalcTotalPage added in v0.3.1

func (pr PageResult[T]) CalcTotalPage() int

CalcTotalPage 计算总页数

type SQLParams added in v0.3.11

type SQLParams struct {
	Sql     string
	WithSql string
	Params  map[string]interface{}
	Err     error
}

Jump to

Keyboard shortcuts

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