mworm

package module
v0.4.3 Latest Latest
Warning

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

Go to latest
Published: Mar 24, 2026 License: MIT Imports: 16 Imported by: 0

README

mworm

mworm 是一个基于 sqlx 封装的 Go 语言 ORM 库,专为 PostgreSQL 和 MySQL 设计。它提供了一套流畅的 API 来构建 SQL 查询、处理复杂的条件逻辑、以及方便的结果集映射。

特别针对 PostgreSQL 的 JSONB、RETURNING 等特性进行了优化支持。

安装

go get github.com/ccxdd/mworm

快速开始

1. 初始化连接

在使用 mworm 之前,需要先绑定 sqlx.DB 对象。

import (
    "github.com/ccxdd/mworm"
    "github.com/jmoiron/sqlx"
    _ "github.com/jackc/pgx/v5/stdlib"
    "log"
)

func initDB() {
    // 连接数据库
    db, err := sqlx.Connect("pgx", "postgres://user:password@localhost:5432/dbname?sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }
    
    // 绑定到 mworm
    err = mworm.BindDB(db)
    if err != nil {
        log.Fatal(err)
    }
}
2. 定义模型

使用 db tag 映射数据库字段,json tag 用于 JSON 序列化及部分 mworm 内部逻辑(如分页结果)。

type User struct {
    ID        int64     `json:"id" db:"id,pk"`          // pk 标识主键
    Name      string    `json:"name" db:"name"`
    Age       int       `json:"age" db:"age"`
    Status    int       `json:"status" db:"status"`
    CreatedAt time.Time `json:"createdAt" db:"created_at"`
}

// 实现 TableName 接口(可选,默认使用结构体名,但建议显式指定)
func (u User) TableName() string {
    return "users"
}

常用功能

1. CRUD 操作
插入 (Insert)
user := User{Name: "Tom", Age: 18, Status: 1}
// 基础插入
err := mworm.INSERT(user).Exec()

// PostgreSQL 支持 RETURNING
var id int64
err := mworm.INSERT(user).RETURNING(&id, nil, "id")
查询 (Select)
// 单条查询
var user User
err := mworm.SELECT(User{}).
    Where(mworm.Eq("id", 1)).
    One(&user)

// 多条查询
var users []User
err := mworm.SELECT(User{}).
    Where(mworm.Gt("age", 18)).
    Asc("age").
    Limit(10).
    Many(&users)
更新 (Update)
// 更新整个结构体(非空字段)
user.Name = "Jerry"
err := mworm.UPDATE(user).
    Where(mworm.Eq("id", 1)).
    Exec()

// 更新指定字段
err := mworm.UPDATE(User{}).
    SetField("name", "Jerry").
    SetField("status", 2).
    Where(mworm.Eq("id", 1)).
    Exec()
删除 (Delete)
err := mworm.DELETE(User{}).
    Where(mworm.Eq("id", 1)).
    Exec()
2. 条件构造

mworm 提供了丰富的条件构造器,支持链式调用。

// 基础条件
mworm.And("name", "age")      // name = ? AND age = ? (值从结构体取)
mworm.Eq("status", 1)         // status = 1
mworm.Gt("age", 18)           // age > 18
mworm.Lt("age", 60)           // age < 60
mworm.IN("status", 1, 2, 3)   // status IN (1, 2, 3)
mworm.NotIN("status", 4, 5)   // status NOT IN (4, 5)
mworm.Between("age", 18, 60)  // age BETWEEN 18 AND 60
mworm.Like("name")            // name LIKE '%value%'

// 自动忽略空值 (非常适合搜索表单)
// 如果 name 或 age 为空值/零值,则该条件自动被忽略
mworm.AndAuto("name", "age")

// 组合条件
orm := mworm.SELECT(User{}).Where(
    mworm.AndAuto("name"),
    mworm.Gte("age", 18),
    mworm.NotIN("status", 0, -1),
    mworm.Between("createdAt", "2024-01-01", "2024-12-31"),
)
OR/AND 嵌套分组

用于构造复杂的组合条件,如 (A OR B) AND (C AND D)

// (status=1 OR status=2) AND age>=18
mworm.SELECT(User{}).Where(
    mworm.OrGroup(mworm.Eq("status", 1), mworm.Eq("status", 2)),
    mworm.Gte("age", 18),
)
// → WHERE (status=? OR status=?) AND age>=?

// (age>=18 AND age<=60)
mworm.SELECT(User{}).Where(
    mworm.AndGroup(mworm.Gte("age", 18), mworm.Lte("age", 60)),
)
// → WHERE (age>=? AND age<=?)
EXISTS / NOT EXISTS
// EXISTS 子查询
mworm.SELECT(User{}).Where(
    mworm.Exists("SELECT 1 FROM orders WHERE orders.user_id = users.id"),
)

// NOT EXISTS 带参数
mworm.SELECT(User{}).Where(
    mworm.NotExists("SELECT 1 FROM blacklist WHERE user_id = users.id AND status = $1", "blocked"),
)
子查询 (SubQuery)
// WHERE id IN (子查询)
mworm.SELECT(User{}).Where(
    mworm.SubQuery("id", "IN", "SELECT user_id FROM orders WHERE amount > $1", 100),
)
// → WHERE id IN (SELECT user_id FROM orders WHERE amount > ?)
3. 聚合查询
// 计数
count, err := mworm.SELECT(User{}).Where(mworm.Gt("age", 18)).Count("*")

// 求和
sum, err := mworm.SELECT(User{}).Where(mworm.Gt("age", 0)).Sum("score")

// 平均值
avg, err := mworm.SELECT(User{}).Avg("age")

// 最小值
min, err := mworm.SELECT(User{}).Min("score")

// 最大值
max, err := mworm.SELECT(User{}).Max("score")
4. 分页查询

mworm.PAGE 提供高效的分页查询。

// page: 当前页码, pageSize: 每页数量
// excludeTags: 不需要返回的字段 json tag
result, err := mworm.PAGE(User{}, 1, 10, []string{"password"}, 
    mworm.AndAuto("name"), // 搜索条件
    mworm.Desc("createdAt"), // 排序
)

if err != nil {
    log.Fatal(err)
}
fmt.Printf("Total: %d, List: %v\n", result.Total, result.List)
5. Upsert (ON CONFLICT)

PostgreSQL 的 INSERT ON CONFLICT 支持。

// 冲突时更新指定字段
err := mworm.INSERT(user).OnConflict("id").DoUpdate("name", "age").Exec()
// → INSERT INTO users (...) VALUES (...) ON CONFLICT (id) DO UPDATE SET name=EXCLUDED.name, age=EXCLUDED.age

// 冲突时忽略
err := mworm.INSERT(user).OnConflict("id").DoNothing().Exec()
// → INSERT INTO users (...) VALUES (...) ON CONFLICT (id) DO NOTHING
6. JOIN 查询
mworm.SELECT(User{}).
    Join(mworm.LeftJoin("orders", "o").
        On(mworm.JoinOn("t.id = o.user_id")).
        Select("order_no", "amount")).
    Where(mworm.Eq("t.is_active", true)).
    Many(&results)
7. 高级特性
批量操作与事务
// 批量执行多个操作
err := mworm.Batch(
    mworm.INSERT(User{Name: "A"}),
    mworm.INSERT(User{Name: "B"}),
)

// 事务支持
err := mworm.BatchFunc(func(tx *sqlx.Tx) {
    // 在此处使用 tx 执行原生 sqlx 操作
})
原生 SQL
// 执行原生 SQL(PostgreSQL 使用 $1, $2 占位符)
mworm.ExecRawSQL("UPDATE users SET status = $1 WHERE id = $2", 1, 100)

// MySQL 使用 ? 占位符
// mworm.ExecRawSQL("UPDATE users SET status = ? WHERE id = ?", 1, 100)

// 原生 SQL 查询映射
var users []User
mworm.RawSQL("SELECT * FROM users WHERE age > 18").Many(&users)
JSONB 支持 (PostgreSQL)
// 将查询结果聚合为 JSONB List
jsonStr, err := mworm.SELECT(User{}).JsonbListString()

// 将查询结果聚合为 JSONB Map
jsonMap, err := mworm.SELECT(User{}).JsonbMapString("id", "name")
CTE (Common Table Expressions)
// 使用 WITH 子句构建 CTE
orm := mworm.SELECT(User{}).
    Where(mworm.Eq("status", 1)).
    With("active_users") // 定义 CTE 表名

// 生成: WITH active_users AS (SELECT * FROM users WHERE status=1) SELECT * FROM active_users
result := orm.FullSQL()
GROUP BY 分组
var result []struct {
    Name  string `json:"name" db:"name"`
    Count int    `json:"count" db:"count"`
}
mworm.SELECT(User{}).
    GroupBy(mworm.Fields("name"), mworm.Raw(`count(*)`)).
    Having("count(name) > $1", 1).
    Many(&result)

调试

开启调试模式,打印生成的 SQL 语句:

mworm.SELECT(User{}).Log(true).Many(&users)
// 或者全局开启
mworm.DebugMode = true

字段常量生成器

使用字段常量替代字符串,提供编译期检查和 IDE 自动补全。

使用示例

假设你的项目结构如下:

myproject/
├── go.mod           # require github.com/ccxdd/mworm
├── models/
│   ├── user.go      # 包含 User 结构体
│   └── order.go     # 包含 Order 结构体
└── main.go

运行生成器:

cd /path/to/myproject

# 方式1:直接运行(推荐,无需安装)
go run github.com/ccxdd/mworm/cmd/fieldgen -dir=models/ -r

# 方式2:全局安装后使用
go install github.com/ccxdd/mworm/cmd/fieldgen@latest
fieldgen -dir=models/ -r

或在模型文件中添加 go generate 指令:

//go:generate go run github.com/ccxdd/mworm/cmd/fieldgen -src=$GOFILE

type User struct {
    // ...
}

然后运行 go generate ./... 即可自动生成。

生成结果:

models/
├── user.go
├── user_fields.go      ← 自动生成
├── order.go
└── order_fields.go     ← 自动生成
生成代码示例
// user_fields.go(自动生成)
var UserF = struct {
    ID        string
    Name      string
    CreatedAt string
}{
    ID:        "id",
    Name:      "name",
    CreatedAt: "createdAt",
}
使用效果
import "myproject/models"

// 之前(容易拼错)
mworm.SELECT(user).Where(mworm.And("createdAt", "name"))

// 之后(类型安全,IDE 自动补全)
mworm.SELECT(user).Where(mworm.And(models.UserF.CreatedAt, models.UserF.Name))

注意:只为实现了 TableName() 方法的结构体生成字段常量。

API 速查表

功能 API 示例
插入 INSERT(entity).Exec() INSERT(user).Exec()
查询单条 SELECT(entity).Where(...).One(&dest) SELECT(User{}).Where(Eq("id",1)).One(&u)
查询多条 SELECT(entity).Where(...).Many(&dest) SELECT(User{}).Where(Gt("age",18)).Many(&users)
更新 UPDATE(entity).Where(...).Exec() UPDATE(user).WherePK().Exec()
删除 DELETE(entity).Where(...).Exec() DELETE(User{}).WherePK().Exec()
等于 Eq(tag, value) Eq("status", 1)
不等于 NEq(tag, value) NEq("status", 0)
大于/大于等于 Gt(tag, value) / Gte(tag, value) Gt("age", 18)
小于/小于等于 Lt(tag, value) / Lte(tag, value) Lt("age", 60)
IN IN(tag, values...) IN("id", 1, 2, 3)
NOT IN NotIN(tag, values...) NotIN("status", 4, 5)
BETWEEN Between(tag, min, max) Between("age", 18, 60)
LIKE Like(tag...) Like("name")
IS NULL Null(tag...) Null("email")
IS NOT NULL NEqNull(tag...) NEqNull("email")
OR 分组 OrGroup(cgs...) OrGroup(Eq("a",1), Eq("b",2))
AND 分组 AndGroup(cgs...) AndGroup(Gte("a",1), Lte("b",10))
EXISTS Exists(sql, args...) Exists("SELECT 1 FROM ...")
NOT EXISTS NotExists(sql, args...) NotExists("SELECT 1 FROM ...")
子查询 SubQuery(tag, symbol, sql, args...) SubQuery("id", "IN", "SELECT ...")
聚合-计数 Count(column) Count("*")
聚合-求和 Sum(column) Sum("score")
聚合-平均 Avg(column) Avg("age")
聚合-最小 Min(column) Min("score")
聚合-最大 Max(column) Max("score")
Upsert OnConflict(tags...).DoUpdate(tags...) INSERT(u).OnConflict("id").DoUpdate("name")
分页 PAGE(entity, page, size, excludes, cgs...) PAGE(User{}, 1, 10, nil)
排序 Asc(tag...) / Desc(tag...) Asc("id").Desc("createdAt")
原生 SQL Raw(express, args...) Raw("age > $1", 18)

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 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: 表达式

	SubGroups []ConditionGroup // SubGroups: 子条件分组(用于嵌套 OR/AND)
	// 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 AndGroup added in v0.4.3

func AndGroup(cgs ...ConditionGroup) ConditionGroup

AndGroup 构造 AND 嵌套分组,如 AndGroup(Gt("a",1), Lt("b",10)) → (a>1 AND b<10)

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 Between added in v0.4.3

func Between(tag string, min, max any) ConditionGroup

Between 构造 BETWEEN 范围查询条件分组,如 Between("age", 18, 60) → age BETWEEN 18 AND 60

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 Exists added in v0.4.3

func Exists(sql string, args ...any) ConditionGroup

Exists 构造 EXISTS 子查询条件,sql 为完整的子查询语句

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 any](tag string, args ...T) ConditionGroup

IN 构造 IN 查询条件分组

func JoinOn added in v0.3.8

func JoinOn(express string) ConditionGroup

JoinOn 创建 JOIN ON 条件 (实际上是 Raw 的别名,为了语义更清晰)

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 NotExists added in v0.4.3

func NotExists(sql string, args ...any) ConditionGroup

NotExists 构造 NOT EXISTS 子查询条件

func NotIN added in v0.4.3

func NotIN[T any](tag string, args ...T) ConditionGroup

NotIN 构造 NOT IN 查询条件分组

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 OrGroup added in v0.4.3

func OrGroup(cgs ...ConditionGroup) ConditionGroup

OrGroup 构造 OR 嵌套分组,如 OrGroup(Eq("a",1), Eq("b",2)) → (a=1 OR b=2)

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 SubQuery added in v0.4.3

func SubQuery(tag, symbol, sql string, args ...any) ConditionGroup

SubQuery 构造 WHERE 子查询条件,如 SubQuery("id", "IN", "SELECT user_id FROM orders WHERE amount > $1", 100)

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 INNER_JOIN added in v0.4.0

func INNER_JOIN(i ORMInterface, alias string) *JoinTable

INNER_JOIN 通过 ORMInterface 创建 INNER JOIN

func InnerJoin added in v0.3.8

func InnerJoin(table, alias string) *JoinTable

InnerJoin 创建一个 INNER JOIN

func LEFT_JOIN added in v0.4.0

func LEFT_JOIN(i ORMInterface, alias string) *JoinTable

LEFT_JOIN 通过 ORMInterface 创建 LEFT JOIN

func LeftJoin added in v0.3.8

func LeftJoin(table, alias string) *JoinTable

LeftJoin 创建一个 LEFT JOIN

func NewJoin added in v0.4.0

func NewJoin(joinType JoinType, table, alias string) *JoinTable

NewJoin 创建一个新的 JoinTable

func RIGHT_JOIN added in v0.4.0

func RIGHT_JOIN(i ORMInterface, alias string) *JoinTable

RIGHT_JOIN 通过 ORMInterface 创建 RIGHT JOIN

func RightJoin added in v0.3.8

func RightJoin(table, alias string) *JoinTable

RightJoin 创建一个 RIGHT JOIN

func (*JoinTable) On added in v0.4.0

func (j *JoinTable) On(cgs ...ConditionGroup) *JoinTable

On 添加连接条件 推荐使用 mworm.Raw("t.id = a.user_id") 或 mworm.JoinOn("t.id = a.user_id")

func (*JoinTable) Select added in v0.4.0

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

Select 指定该连接表需要查询的字段

type JoinType added in v0.3.8

type JoinType int

JoinType 连接类型

const (
	InnerJoinType JoinType = iota // INNER JOIN
	LeftJoinType                  // LEFT JOIN
	RightJoinType                 // 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 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) Avg added in v0.4.3

func (o *OrmModel) Avg(column string) (float64, error)

Avg 平均值

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) DoNothing added in v0.4.3

func (o *OrmModel) DoNothing() *OrmModel

DoNothing 冲突时不做任何操作,需先调用 OnConflict

func (*OrmModel) DoUpdate added in v0.4.3

func (o *OrmModel) DoUpdate(jsonTags ...string) *OrmModel

DoUpdate 冲突时更新指定字段(json tag),需先调用 OnConflict

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(join *JoinTable) *OrmModel

Join 添加连接表到 OrmModel

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) Max added in v0.4.3

func (o *OrmModel) Max(column string) (float64, error)

Max 最大值

func (*OrmModel) Min added in v0.4.3

func (o *OrmModel) Min(column string) (float64, error)

Min 最小值

func (*OrmModel) Offset

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

func (*OrmModel) OnConflict added in v0.4.3

func (o *OrmModel) OnConflict(jsonTags ...string) *OrmModel

OnConflict 指定 Upsert 冲突列(json tag),用于 INSERT ON CONFLICT

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) Sum added in v0.4.3

func (o *OrmModel) Sum(column string) (float64, error)

Sum 求和

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 // 含占位符 ? 的 SQL(配合 Args 使用)
	WithSql string
	Params  map[string]interface{}
	Args    []any
	Err     error
}

func (SQLParams) ExeSql added in v0.4.1

func (sp SQLParams) ExeSql() string

func (SQLParams) TxExec added in v0.4.1

func (sp SQLParams) TxExec(tx *sqlx.Tx) (dbsql.Result, error)

func (SQLParams) TxMustExec added in v0.4.1

func (sp SQLParams) TxMustExec(tx *sqlx.Tx) dbsql.Result

Directories

Path Synopsis
cmd
fieldgen command
Package main 提供 mworm 字段常量生成器 用法:
Package main 提供 mworm 字段常量生成器 用法:

Jump to

Keyboard shortcuts

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