package
1.12.6
Repository: https://github.com/go-dev-frame/sponge.git
Documentation: pkg.go.dev

# README

ggorm

ggorm library wrapped in gorm, with added features such as tracer, paging queries, etc.

Support mysql, postgresql, sqlite.


Examples of use

mysql

Initializing the connection

    import (
        "github.com/go-dev-frame/sponge/pkg/ggorm"
    )

    var dsn = "root:123456@(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"

    // (1) connect to the database using the default settings
    db, err := ggorm.InitMysql(dsn)

    // (2) customised settings to connect to the database
    db, err := ggorm.InitMysql(
        dsn,
        ggorm.WithLogging(logger.Get()),  // print log
        ggorm.WithLogRequestIDKey("request_id"),  // print request_id
        ggorm.WithMaxIdleConns(5),
        ggorm.WithMaxOpenConns(50),
        ggorm.WithConnMaxLifetime(time.Minute*3),
        // ggorm.WithSlowThreshold(time.Millisecond*100),  // only print logs that take longer than 100 milliseconds to execute
        // ggorm.WithEnableTrace(),  // enable tracing
        // ggorm.WithRWSeparation(SlavesDsn, MastersDsn...)  // read-write separation
        // ggorm.WithGormPlugin(yourPlugin)  // custom gorm plugin
    )

Model

package model

import (
	"github.com/go-dev-frame/sponge/pkg/ggorm"
)

// UserExample object fields mapping table
type UserExample struct {
	ggorm.Model `gorm:"embedded"`

	Name   string `gorm:"type:varchar(40);unique_index;not null" json:"name"`
	Age    int    `gorm:"not null" json:"age"`
	Gender string `gorm:"type:varchar(10);not null" json:"gender"`
}

// TableName get table name
func (table *UserExample) TableName() string {
	return ggorm.GetTableName(table)
}

Transaction

    func createUser() error {
        // note that you should use tx as the database handle when you are in a transaction
        tx := db.Begin()
        defer func() {
            if err := recover(); err != nil { // rollback after a panic during transaction execution
                tx.Rollback()
                fmt.Printf("transaction failed, err = %v\n", err)
            }
        }()

        var err error
        if err = tx.Error; err != nil {
            return err
        }

        if err = tx.Where("id = ?", 1).First(table).Error; err != nil {
            tx.Rollback()
            return err
        }

        panic("mock panic")

        if err = tx.Create(&userExample{Name: "Mr Li", Age: table.Age + 2, Gender: "male"}).Error; err != nil {
            tx.Rollback()
            return err
        }

        return tx.Commit().Error
    }

Postgresql

import (
   "github.com/go-dev-frame/sponge/pkg/ggorm"
   "github.com/go-dev-frame/sponge/pkg/utils"
)

func InitSqlite() {
	opts := []ggorm.Option{
		ggorm.WithMaxIdleConns(10),
		ggorm.WithMaxOpenConns(100),
		ggorm.WithConnMaxLifetime(time.Duration(10) * time.Minute),
		ggorm.WithLogging(logger.Get()),
		ggorm.WithLogRequestIDKey("request_id"),
	}

	dsn := "root:[email protected]:5432/test"
	dsn = utils.AdaptivePostgresqlDsn(dsn)
	db, err := ggorm.InitPostgresql(dsn, opts...)
	if err != nil {
		panic("ggorm.InitPostgresql error: " + err.Error())
	}
}

Tidb

Tidb is mysql compatible, just use InitMysql.


Sqlite

import (
   "github.com/go-dev-frame/sponge/pkg/ggorm"
)

func InitSqlite() {
	opts := []ggorm.Option{
		ggorm.WithMaxIdleConns(10),
		ggorm.WithMaxOpenConns(100),
		ggorm.WithConnMaxLifetime(time.Duration(10) * time.Minute),
		ggorm.WithLogging(logger.Get()),
		ggorm.WithLogRequestIDKey("request_id"),
	}

	dbFile: = "test.db"
	db, err := ggorm.InitSqlite(dbFile, opts...)
	if err != nil {
		panic("ggorm.InitSqlite error: " + err.Error())
	}
}

gorm User Guide

# Packages

Package query is a library of custom condition queries, support for complex conditional paging queries.

# Functions

CloseDB close gorm db.
CloseSQLDB close sql db.
GetTableName get table name.
InitMysql init mysql or tidb.
InitPostgresql init postgresql.
InitSqlite init sqlite.
InitTidb init tidb.
NewCustomGormLogger custom gorm logger.
WithConnMaxLifetime set conn max lifetime.
WithEnableForeignKey use foreign keys.
WithEnableTrace use trace.
WithGormPlugin setting gorm plugin.
WithLogging set log sql, If l=nil, the gorm log library will be used.
WithLogRequestIDKey log request id.
WithMaxIdleConns set max idle conns.
WithMaxOpenConns set max open conns.
WithRWSeparation setting read-write separation.
WithSlowThreshold Set sql values greater than the threshold.

# Constants

DBDriverMysql mysql driver.
DBDriverPostgresql postgresql driver.
DBDriverSqlite sqlite driver.
DBDriverTidb tidb driver.

# Structs

Model embedded structs, add `gorm: "embedded"` when defining table structs.
Model2 embedded structs, json tag named is snake case.

# Type aliases

No description provided by the author
KV map type.
Option set the mysql options.