mysql

package
v1.0.38 Latest Latest
Warning

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

Go to latest
Published: Sep 2, 2024 License: MIT Imports: 18 Imported by: 0

README

mysql

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


Example of use

Initializing the connection

    import "github.com/18721889353/sunshine/pkg/mysql"

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

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

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

Model

package model

import "github.com/18721889353/sunshine/pkg/mysql"

// UserExample object fields mapping table
type UserExample struct {
	mysql.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 mysql.GetTableName(table)
}

Transaction

import "github.com/18721889353/sunshine/pkg/mysql"

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
}

gorm User Guide

Documentation

Overview

Package mysql is a library wrapped on top of gorm.io/gorm, with added features such as link tracing, paging queries, etc. Deprecated: moved to package pkg/ggorm, will be deleted in the future

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Count

func Count(ctx context.Context, db *gorm.DB, table interface{}, queryCondition interface{}, args ...interface{}) (int64, error)

Count number of records the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm Count

func Create

func Create(ctx context.Context, db *gorm.DB, table interface{}) error

Create a new record the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm Create

func Delete

func Delete(ctx context.Context, db *gorm.DB, table interface{}, queryCondition interface{}, args ...interface{}) error

Delete record the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm Delete

func DeleteByID

func DeleteByID(ctx context.Context, db *gorm.DB, table interface{}, id interface{}) error

DeleteByID delete record by id the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm DeleteByID

func Get

func Get(ctx context.Context, db *gorm.DB, table interface{}, queryCondition interface{}, args ...interface{}) error

Get one record the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm Get

func GetByID

func GetByID(ctx context.Context, db *gorm.DB, table interface{}, id interface{}) error

GetByID get record by id Deprecated: moved to package pkg/ggorm GetByID

func GetTableName

func GetTableName(object interface{}) string

GetTableName get table name Deprecated: moved to package pkg/ggorm GetTableName

func Init

func Init(dns string, opts ...Option) (*gorm.DB, error)

Init mysql Deprecated: moved to package pkg/ggorm InitMysql

func List

func List(ctx context.Context, db *gorm.DB, tables interface{}, page *query.Page, queryCondition interface{}, args ...interface{}) error

List multiple records, starting from page 0 the param of 'tables' must be a slice, eg: []StructName Deprecated: moved to package pkg/ggorm List

func NewCustomGormLogger

func NewCustomGormLogger(o *options) logger.Interface

NewCustomGormLogger custom gorm logger Deprecated: moved to package pkg/ggorm NewCustomGormLogger

func TableName

func TableName(table interface{}) string

TableName get table name Deprecated: moved to package pkg/ggorm TableName

func Update

func Update(ctx context.Context, db *gorm.DB, table interface{}, column string, value interface{}, queryCondition interface{}, args ...interface{}) error

Update record the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm Update

func Updates

func Updates(ctx context.Context, db *gorm.DB, table interface{}, update KV, queryCondition interface{}, args ...interface{}) error

Updates record the param of 'table' must be pointer, eg: &StructName Deprecated: moved to package pkg/ggorm Updates

Types

type KV

type KV = map[string]interface{}

KV map type Deprecated: moved to package pkg/ggorm KV

type Model

type Model struct {
	ID        uint64         `gorm:"column:id;AUTO_INCREMENT;primary_key" json:"id"`
	CreatedAt time.Time      `gorm:"column:created_at" json:"createdAt"`
	UpdatedAt time.Time      `gorm:"column:updated_at" json:"updatedAt"`
	DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;index" json:"-"`
}

Model embedded structs, add `gorm: "embedded"` when defining table structs Deprecated: moved to package pkg/ggorm Model

type Model2

type Model2 struct {
	ID        uint64         `gorm:"column:id;AUTO_INCREMENT;primary_key" json:"id"`
	CreatedAt time.Time      `gorm:"column:created_at" json:"created_at"`
	UpdatedAt time.Time      `gorm:"column:updated_at" json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;index" json:"-"`
}

Model2 embedded structs, json tag named is snake case Deprecated: moved to package pkg/ggorm Model2

type Option

type Option func(*options)

Option set the mysql options. Deprecated: moved to package pkg/ggorm Option

func WithConnMaxLifetime

func WithConnMaxLifetime(t time.Duration) Option

WithConnMaxLifetime set conn max lifetime Deprecated: moved to package pkg/ggorm WithConnMaxLifetime

func WithEnableForeignKey

func WithEnableForeignKey() Option

WithEnableForeignKey use foreign keys Deprecated: moved to package pkg/ggorm WithEnableForeignKey

func WithEnableTrace

func WithEnableTrace() Option

WithEnableTrace use trace Deprecated: moved to package pkg/ggorm WithEnableTrace

func WithGormPlugin

func WithGormPlugin(plugins ...gorm.Plugin) Option

WithGormPlugin setting gorm plugin Deprecated: moved to package pkg/ggorm WithGormPlugin

func WithLog

func WithLog() Option

WithLog set log sql Deprecated: will be replaced by WithLogging

func WithLogRequestIDKey

func WithLogRequestIDKey(key string) Option

WithLogRequestIDKey log request id Deprecated: moved to package pkg/ggorm WithLogRequestIDKey

func WithLogging

func WithLogging(l *zap.Logger, level ...logger.LogLevel) Option

WithLogging set log sql, If l=nil, the gorm log library will be used Deprecated: moved to package pkg/ggorm WithLogging

func WithMaxIdleConns

func WithMaxIdleConns(size int) Option

WithMaxIdleConns set max idle conns Deprecated: moved to package pkg/ggorm WithMaxIdleConns

func WithMaxOpenConns

func WithMaxOpenConns(size int) Option

WithMaxOpenConns set max open conns Deprecated: moved to package pkg/ggorm WithMaxOpenConns

func WithRWSeparation

func WithRWSeparation(slavesDsn []string, mastersDsn ...string) Option

WithRWSeparation setting read-write separation Deprecated: moved to package pkg/ggorm WithRWSeparation

func WithSlowThreshold

func WithSlowThreshold(d time.Duration) Option

WithSlowThreshold Set sql values greater than the threshold Deprecated: moved to package pkg/ggorm WithSlowThreshold

Directories

Path Synopsis
Package query is a library for mysql query, support for complex conditional paging queries.
Package query is a library for mysql query, support for complex conditional paging queries.

Jump to

Keyboard shortcuts

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