Categorygithub.com/Shanghai-Lunara/db-crud-generator
repositorypackage
0.0.0-20220804072352-c41652c953d0
Repository: https://github.com/shanghai-lunara/db-crud-generator.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

db-crud-generator

This is a tool which was used to auto generating crud codes with the go struct

Model struct definition

It will scan tag of fields.

Use "primary", "index" to mark whether this field is the primary key, index field.

type ThisIsASchema struct {
	Id int32 `db:"primary;index;shard;not null"`
	ThisIsAnIndexCols string `db:"index;not null"`
}

How to generate

  • Generate from command flags
package main

import (
	gen "github.com/Shanghai-Lunara/db-crud-generator"
)

func main() {
	gen.GenerateWithFlagScan()
}

run as:

go run main.go  -projectName=my_project -scanPath=path/to/model -outputPath=path/to/out 
  • Or generate from parameter
package main

import (
	gen "github.com/Shanghai-Lunara/db-crud-generator"
)

func main() {
	gen.Generate("my_project", "path/to/model", "path/to/out")
}

  • Attention

It will generate a go file contains insert, query and update methods.

The where clause will only generate fields marked with primary and index.

Use after generated

package main

import (
	"context"
	"database/sql"
	"github.com/Shanghai-Lunara/db-crud-generator/example/out"
	"time"
)

func f(tx *sql.Tx, db *sql.DB) {
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
	defer cancel()

	// insert, index arg mark value at same row
	err := out.NewThisIsASchemaInsert().
		SetId(1, 1).
		SetThisIsAnIndexCols(1, "emm").
		SetId(2, 2).
		SetId(3, 3).
		SetThisIsAnIndexCols(2, "emm2").
		SetThisIsAnIndexCols(3, "emm3").
		ExecTx(ctx, tx)

	// select
	result, err := out.NewThisIsASchemaSelect().
		SelectThisIsAnIndexCols().
		WhereIdEq(1).
		Query(ctx, db)

	// update
	err := out.NewThisIsASchemaUpdate().
		SetThisIsAnIndexCols("oh").
		WhereIdEq(1).
		ExecTx(tx)
}