mbt

package module
v0.4.1 Latest Latest
Warning

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

Go to latest
Published: Apr 6, 2022 License: Apache-2.0 Imports: 22 Imported by: 0

README

mbt

1、Useage

  • 1、
package main

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/kotlin2018/mbt"
	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"io"
	"time"
)

var activity = ActivityDao{}

// 这是数据库中表 biz_activity 的实体类
type BizActivity struct {
	Id         string    
	Name       string    
	PcLink     string   
	H5Link     string   
	Remark     string   
	Sort       int      
	Status     int      
	Version    int      
	CreateTime time.Time 
	DeleteFlag int       
	Salary     float64   
}

func main() {
	// 第一步: 初始化配置信息
	cfg := &mbt.Database{
		Pkg:        "./xml",                                                                                 // 生成的xml文件地址(即:xml文件放在哪个目录下)
		DriverName: "mysql",                                                                                 // 驱动名称
		DSN:        "root:root@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai", // 数据连接信息
		Logger: &mbt.Logger{
			PrintSql: true,           // 输出 sql 语句
			Path:     "/tmp",         // 日志文件的路径
			LinkName: "./rotate.log", // 最新的日志软连接名
			MaxAge:   180,            // 日志文件清理前的最长保存时间(单位分钟)
			Interval: 2,              // 日志分割的时间,隔多久分割一次(单位分钟)
		},
	}

	// 第二步: 创建一个 session 对象,一个 session 对象操作一个 SQL数据库。
	session := mbt.New(cfg)

	// 第三步: 配置日志输出(可选)
	session.SetOutPut(initLogger(cfg.Logger.Path, cfg.Logger.MaxAge, cfg.Logger.Interval))

	// 第四步: 将mapper结构体注册到服务中,并启动服务。
	session.Run(&activity)
}

// 具体的 增、删、改、查 方法
type ActivityDao struct {
	BizActivity BizActivity
	Insert func(arg BizActivity) int64
	Delete func(arg BizActivity) int64
	Update func(arg BizActivity) int64
	Select func(arg BizActivity) BizActivity
}

func initLogger (path string,maxAge,interval int)io.Writer{
	writer, _ := rotatelogs.New(
		path+".%Y%m%d%H%M",
		rotatelogs.WithLinkName(path),
		rotatelogs.WithMaxAge(time.Duration(maxAge)*time.Minute),
		rotatelogs.WithRotationTime(time.Duration(interval)*time.Minute),
	)
	return writer
}
  • 2、运行 main 函数,则在当前项目根目录下生成 xml 目录,在 xml 目录下自动生成 ActivityDao.xml文件

  • 3、编辑 ActivityDao.xml文件,即: 在 ActivityDao.xml 中写具体的 SQL语句

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "https://github.com/kotlin2018/mbt/blob/master/mybatis.dtd">
<mapper namespace=".ActivityDao">
    <!--logic_enable 逻辑删除字段-->
    <!--logic_deleted 逻辑删除已删除字段-->
    <!--logic_undelete 逻辑删除 未删除字段-->
    <!--version_enable 乐观锁版本字段,支持int,int8,int16,int32,int64-->
	<resultMap id="base" table="biz_activity">
    	<result column="id" property="Id" langType="string"  />
	<result column="name" property="Name" langType="string"  />
	<result column="pc_link" property="PcLink" langType="string"  />
	<result column="h5_link" property="H5Link" langType="string"  />
	<result column="remark" property="Remark" langType="string"  />
	<result column="sort" property="Sort" langType="int"  />
	<result column="status" property="Status" langType="int"  />
	<result column="version" property="Version" langType="int"  />
	<result column="create_time" property="CreateTime" langType="time.Time"  />
	<result column="delete_flag" property="DeleteFlag" langType="int"  />
	<result column="salary" property="Salary" langType="float64"  />
    </resultMap>

	<!--插入模板:默认id="insert" 支持批量插入 -->
	<insert id="insert" resultMap="base" />

	<!--删除模板:默认id="delete",where自动设置逻辑删除字段-->
	<delete id="delete" resultMap="base" where=""/>

	<!--更新模板:默认id="update",set自动设置乐观锁版本号-->
	<update id="update" set="" resultMap="base" where=""/>

	<!--查询模板:默认id="select",where自动设置逻辑删除字段-->
	<select id="select" column="" resultMap="base" where=""/>
</mapper>

2、默认支持的数据库驱动:

"mysql","tidb" ====> "github.com/go-sql-driver/mysql"


"mymysql"   ====> "github.com/ziutek/mymysql/godrv"


"postgres","cockroachDB"  ====> "github.com/lib/pq"


"sqlite3","sqlite" ====> "github.com/mattn/go-sqlite3"


"mssql" ====> "github.com/denisenkom/go-mssqldb"


"oci8" ====> "github.com/mattn/go-oci8"


"clickhouse" ====> "github.com/ClickHouse/clickhouse-go"

  • 自定义数据库驱动:
先实现 mbt.Convert 接口,再调用 Session.Driver(),将自定义的驱动注册到当前 Session 对象中即可。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Convert added in v0.2.0

type Convert interface {
	Convert() string
	Inc()
	Get() int
}

type Database added in v0.1.3

type Database struct {
	Pkg             string    `yaml:"pkg" toml:"pkg"`                               // 生成的xml文件的包名
	DriverName      string    `yaml:"driver_name" toml:"driver_name"`               // 驱动名称。例如: mysql,postgreSQL...
	DSN             string    `yaml:"dsn" toml:"dsn"`                               // 数据库连接信息。例如: "root:root@(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local"
	MaxOpenConn     int       `yaml:"max_open_conn" toml:"max_open_conn"`           // 最大的并发打开连接数。例如: 这个值是5则表示==>连接池中最多有5个并发打开的连接,如果5个连接都已经打开被使用,并且应用程序需要另一个连接的话,那么应用程序将被迫等待,直到5个打开的连接其中的一个被释放并变为空闲。
	MaxIdleConn     int       `yaml:"max_idle_conn" toml:"max_idle_conn"`           // 最大的空闲连接数。注意: MaxIdleConn 应该始终小于或等于 MaxOpenConn,设置比 MaxOpenConn 更多的空闲连接数是没有意义的,因为你最多也就能拿到所有打开的连接,剩余的空闲连接依然保持的空闲。
	ConnMaxLifetime int       `yaml:"conn_max_life_time" toml:"conn_max_life_time"` // 单位 time.Minute 连接的最大生命周期(默认值:0)。设置为0的话意味着没有最大生命周期,连接总是可重用。注意: ConnMaxLifetime 越短,从零开始创建连接的频率就越高!
	ConnMaxIdleTime int       `yaml:"conn_max_idle_time" toml:"conn_max_idle_time"` // 单位 time.Minute
	Logger          *Logger   `yaml:"logger" toml:"logger"`                         // logger日志记录器
	Slave           *Database `yaml:"slave" toml:"slave"`
}

type Id

type Id int64

func (Id) Base2

func (f Id) Base2() string

Base2 returns a string base2 of the snowflake ID

func (Id) Base32

func (f Id) Base32() string

Base32 uses the z-base-32 character set but encodes and decodes similar to base58, allowing it to create an even smaller result string. NOTE: There are many different base32 implementations so becareful when doing any interoperation.

func (Id) Base36

func (f Id) Base36() string

Base36 returns a base36 string of the snowflake ID

func (Id) Base58

func (f Id) Base58() string

Base58 returns a base58 string of the snowflake ID

func (Id) Base64

func (f Id) Base64() string

Base64 returns a base64 string of the snowflake ID

func (Id) Bytes

func (f Id) Bytes() []byte

Bytes returns a byte slice of the snowflake ID

func (Id) Int64

func (f Id) Int64() int64

Int64 returns an int64 of the snowflake ID

func (Id) IntBytes

func (f Id) IntBytes() [8]byte

IntBytes returns an array of bytes of the snowflake ID, encoded as a big endian integer.

func (Id) MarshalJSON

func (f Id) MarshalJSON() ([]byte, error)

MarshalJSON returns a json byte array string of the snowflake ID.

func (Id) Node

func (f Id) Node() int64

Node returns an int64 of the snowflake ID node number DEPRECATED: the below function will be removed in a future release.

func (Id) Step

func (f Id) Step() int64

Step returns an int64 of the snowflake step (or sequence) number DEPRECATED: the below function will be removed in a future release.

func (Id) String

func (f Id) String() string

String returns a string of the snowflake ID

func (Id) Time

func (f Id) Time() int64

Time returns an int64 unix timestamp in milliseconds of the snowflake ID time DEPRECATED: the below function will be removed in a future release.

func (*Id) UnmarshalJSON

func (f *Id) UnmarshalJSON(b []byte) error

UnmarshalJSON converts a json byte array of a snowflake ID into an ID type.

type Logger added in v0.2.6

type Logger struct {
	PrintSql bool   `yaml:"print_sql" toml:"print_sql"` // 设置是否打印SQL语句
	PrintXml bool   `yaml:"print_xml" toml:"print_xml"` // 是否打印 xml文件信息
	Path     string `yaml:"path" toml:"path"`           // 日志输出路径
	LinkName string `yaml:"link_name" toml:"link_name"` // 为最新的日志建立软连接
	Interval int    `yaml:"interval" toml:"interval"`   // 设置日志分割的时间,隔多久分割一次
	MaxAge   int    `yaml:"max_age" toml:"max_age"`     // 日志文件被清理前的最长保存时间
	Count    int    `yaml:"count" toml:"count"`         // 日志文件被清理前最多保存的个数,(-1 表示不使用该项)
}

type Session

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

func New

func New(cfg *Database) *Session

func (*Session) Begin

func (it *Session) Begin()

func (*Session) Commit

func (it *Session) Commit()

func (*Session) Driver added in v0.2.0

func (it *Session) Driver(masterDriver, slaveDriver Convert) *Session

func (*Session) ID added in v0.2.0

func (it *Session) ID(node int64) Id

生成雪花算法的ID

func (*Session) MasterDB added in v0.4.1

func (it *Session) MasterDB() *sql.DB

func (*Session) Register added in v0.2.0

func (it *Session) Register(mapperPtr interface{}) *Session

func (*Session) Run added in v0.2.0

func (it *Session) Run(mapperPtr ...interface{})

func (*Session) SetOutPut added in v0.2.0

func (it *Session) SetOutPut(w io.Writer) *Session

func (*Session) SlaveDB added in v0.4.1

func (it *Session) SlaveDB() *sql.DB

Jump to

Keyboard shortcuts

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