orm

package module
v1.0.84 Latest Latest
Warning

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

Go to latest
Published: Oct 20, 2022 License: MIT Imports: 24 Imported by: 10

README

目录结构的说明
	--cache   系统缓存类
	--log     基础的日志库
	--sqlmap  基础的map转struct 与 struct 转map的第三方依赖,直接整合进来
	--根目录   三个类完成基础orm的封装,内置缓存的管理,以及数据库连接的基础配置

	git tag 查看tag
	git tag -a vx.x.x -m "test" 新建一个tag
	git push origin vx.x.x  标签推送到服务器
	go github私有仓库的配置


#这个步骤的操作是讲git https请求转换成协议转成git请求  需要在githunb上配置服务器的公钥
cat ~/.ssh/id_rsa.pub  #配置添加到githun sshkey当中
如果没有公钥文件生成一下

	ssh-keygen -t rsa -C “your@email.com”
	
	git config --global user.name "xxx"
	
	git config --global user.email "your@email.com"
	
	git config --global url."git@github.com:".insteadof https://github.com/


1、封装数据库的常规操作,有orm的影子,但是又不是强orm
insert/replace into [table] [value] [duplicate]


	update [table] [value] [where]
	
	
	delete [table] [where]
	
	
	select [fields] from [table] [where] [group by] [having] [order by]


mysql.go 实现上诉语句的拆解封装,通过调用函数生成代码片段,最后执行的时候拼接成完整的sql语句执行,同时将要绑定的变量放到marks当中

允许通过Reset/Clear等方法清理重置sql片段

具体参考测试代码片段


	func TestMysql(t *testing.T) {
		sqlSt := NewMysql()
		//sqlSt := NewMysql().SetDriver(POSTGRES) 设置PG SLQ的特殊语法 默认Mysql语法
		args := struct {
			Name string
			Tag string
			Ename string
		}{"leicc", "A", "xxx"}
	
		//批量字段查询隐射到结构体
		tsql := sqlSt.Clear().Table("test").UseCond([]string{"Name", "Tag", "Ename"}, &args, OP_NE, OP_OR).AsSql("SELECT")
		t.Log(tsql)
	
		//批量相同字段映射到统一的查询条件
		tsql = sqlSt.Clear().Table("test").UseBatch([]string{"Name", "Tag", "Ename"}, "%leicc%", OP_LIKE, OP_OR).AsSql("SELECT")
		t.Log(tsql)
	
		sql := sqlSt.Clear().Table("test").Where("id", 1).AsSql("select")
		t.Log(sql)
	
		sql := sqlSt.Clear().Table("test").Where("id", 1).AsSql("delete")
		t.Log(sql)
	
		sql = sqlSt.Clear().Table("test").Value("id", 1).Value("name", "leicc").AsSql("insert")
		t.Log(sql)
	
		sql = sqlSt.Clear().Table("test").Value("name", "demo").Where("id", 1, OP_EQ).AsSql("update")
		t.Log(sql)
	
		sqlSt.Clear().Table("test", "a").Field("a.id, b.refid").Table("user", "b", "a.id=b.refid")
		sql = sqlSt.Where("a.name", "demo").GroupBy("a.refid").OrderBy("a.id", DESC).AsSql("select")
		t.Log(sql)
	}


query.go 主要是集成mysqlST,增加数据据句柄达成真正的查询目的

Insert/Update/Delete/GetRow/GetList/GetItem/GetMap/NameMap/GetColumn/GetAsSql/GetValue

返回的数据类型依赖注入的field字段做映射,完成获取数据之后自动转换

	func TestQuery(t *testing.T) {
		db, err := sqlx.Open("mysql", "root:@tcp(127.0.0.1:3306)/admin?charset=utf8mb4")
		if err != nil {
			t.Error(err)
			return
		}
	
		fields := map[string]reflect.Kind{
		"id":			reflect.Int64,	//账号id
		"openid":		reflect.String,	//第三方Openid
		"account":		reflect.String,	//登录账号
		"avatar":		reflect.String,	//用户的头像信息
		"loginpw":		reflect.String,	//登录密码 要求客户端md5之后传到服务端做二次校验
		"sex":			reflect.Int8,	//性别 1-男 2-女
		"nickname":		reflect.String,	//昵称
		}
		query := NewQuery(fields).SetDb(db)
		query.Table("sys_user").Where("id", 1, OP_EQ).Field("id,account,nickname")
		data := query.GetRow()
		t.Log(data)
	
		user := struct {
		Id 	int64 `json:"id"`
		Account string `json:"account"`
		NickName string `json:"nickname"`
		}{}
		err = query.GetRow().ToStruct(&user)
		t.Log(err, user)
	
		query.Clear().Table("sys_user").Field("id,account,nickname")
		list := query.GetList("", 0 , 2)
		t.Log(list)
	
		query.Clear().Table("sys_user").Field("id").Where("id", []int64{1,2,3,4}, OP_IN)
		column := query.GetColumn("", 0, -1)
		t.Log(column)
	
		query.Clear().Table("sys_user").Field("id as `key`, account as `val`").Where("id", []int64{1,2,3,4}, OP_IN)
		asmap := query.GetMap("", 0, -1)
		t.Log(asmap)
	
		query.Clear().Table("sys_user").Field("id,account,nickname").Where("id", []int64{1,2,3,4}, OP_IN)
		nsmap := query.NameMap("", "id", 0, -1)
		t.Log(nsmap)
	}


model.go主要集成query+数据库连接池+缓存策略+数据表模型 
实现表记录的增加、删除、修改、查询(取列表、取指定的列、取map结构等等)
缓存策略使用表级别的缓存版本号,一个表维护一个版本号,只要这个表有update/inster/delete 操作就更新版本号,这样这个表的所有数据都会自动失效。

例如GetList 操作缓存key user@hash(查询条件+版本号) 只要版本号变动,下一次取数据的时候缓存就无法命中,就可以取db,然后重新建立缓存,达到数据对数据的保护效果

model配置主/从数据库的获取配置的key信息,update/inster/delete 主库操作,select默认都是从库操作的。

通过自动化脚本生成orm
示例代码

	package main
	import (
		"github.com/leicc520/go-orm"
		"github.com/leicc520/go-orm/cache"
	)
	func main() {
		cacheSt := cache.CacheConfigSt{"redis", "redis://:@127.0.0.1:6379/1"}
		dbmaster:= orm.DbConfig{"mysql", "root:@tcp(127.0.0.1:3306)/admin?charset=utf8mb4", 32, 32}
		config  := struct {
			Redis  string
			Cache  cache.CacheConfigSt
			DbMaster orm.DbConfig
			DbSlaver orm.DbConfig
		}{"redis://:@127.0.0.1:6379/1", cacheSt, dbmaster, dbmaster}
		orm.LoadDbConfig(config)//配置数据库结构注册到数据库调用配置当中
		orm.CreateMYSQLModels("dbmaster", "dbslaver", "./models")
	}

数据库映射到代码的工具,将每个表生成model,放到指定的目录,提供给项目使用,配置Redis的话将会使用Redis作为缓存策略

2、每个表继承orm.modelSt,也就集成了这个结构体的方法,包含了插入、删除、修改、取列表等等操作,查询的话自动会缓存数据,更新的时候清理缓存数据,通过每个表维护一个版本号更新.

	/****************************************************************************************
	在这个类是动态生成,
	*/
	type demoUser struct {
		*ModelSt
	}
	func newDemoUser() *demoUser {
		fields := map[string]reflect.Kind{
			"id":		reflect.Int64,	//账号id
			"openid":	reflect.String,	//第三方Openid
			"account":	reflect.String,	//登录账号
			...
			"stime":	reflect.Int,	//最后操作时间
		}
		args  := map[string]interface{}{
			"table":		"sys_user",
			"orgtable":		"sys_user",
			"prikey":		"id",
			"dbmaster":		"dbmaster",
			"dbslaver":		"dbslaver",
			"slot":			0,
		}
		data := &demoUser{&orm.ModelSt{}}
		data.Init(&orm.GdbPoolSt, args, fields)
		return data
	}

4、根据id主键获取一条记录,默认返回SqlMap结构,可以加ToStruct转为结构体

	sorm := models.NewSysSyslog(dbCtx).SetYmTable("200601")
	data := struct {
		Id int `json:"id"`
		Ip string `json:"ip"`
		Msg string `json:"msg"`
		Stime int64 `json:"stime"`
	}{}
	err1 := sorm.GetOne(3).ToStruct(&data)
	fmt.Println(data, err1)

5、根据id主键更新记录	两种方式,直接使用SqlMap更新或者使用匿名函数设置要更新的字段

	sorm.Save(3, orm.SqlMap{"msg":"leicc"})
	sorm.SaveFromHandler(3, func(st *orm.QuerySt) *orm.QuerySt {
		st.Value("ip", "129.65.23.123")
		return st
	})
	err2 := sorm.GetOne(3).ToStruct(&data)
	fmt.Println(data, err2)

6、根据条件获取满足条件的某一条记录,同样使用匿名函数设置查询条件

	err3 := sorm.GetItem(func(st *orm.QuerySt) string {
		st.Where("id", 3)
		return st.GetWheres()
	}, "id,msg,ip,stime").ToStruct(&data)
	fmt.Println(data, "=========", err3)

7、根据获取获取列表,返回SqlMap切片列表

	list := sorm.GetList(0, 5, func(st *orm.QuerySt) string {
		st.Where("id", 3, orm.OP_GE)
		return st.GetWheres()
	}, "id,msg,ip,stime")
	fmt.Println(list)

8、根据条件返回表中指定的一列数据

	ids := sorm.GetColumn(0, 3, func(st *orm.QuerySt) string {
		return st.GetWheres()
	}, "id")
	fmt.Println(ids)

9、根据条件返回指定表的key=>val结构的map,例如返回字典id映射=>名称的map结构

	smap := sorm.GetAsMap(0, -1, func(st *orm.QuerySt) string {
		return st.GetWheres()
	}, "id as `key`, msg as `val`")
	fmt.Println(smap)

10、根据条件返回指定表的map结构,但是这里是key=>item(记录)SqlMap结构,指定一个key隐射到一条记录

	nmap := sorm.GetNameMap(0, 2, func(st *orm.QuerySt) string {
		return st.GetWheres()
	}, "id,ip,msg,stime", "id")
	fmt.Println(nmap)

11、获取查询聚合,例如count(1) 返回查询条件的记录数,SUM(xx)统计累计和的数据等

	total := sorm.GetTotal(func(st *orm.QuerySt) string {
		return st.GetWheres()
	}, "COUNT(1)").ToInt64()
	fmt.Println(total, "===========")

12、查询指定条件的记录是否存在,返回记录ID,例如判定名称是否被使用等等情况

	oldid := sorm.IsExists(func(st *orm.QuerySt) string {
		st.Where("id", 3333)
		return st.GetWheres()
	}).ToInt64()
	fmt.Println(oldid, "====")

13、根据SQL查询表记录,返回SqlMap切片结构

	sql := "SELECT * FROM "+sorm.GetTable()
	slist := sorm.GetAsSQL(sql, 0, 3)
	fmt.Println(slist, "=========end", sql)

14、根据条件设置执行update语句

	sorm.MultiUpdate(func(st *orm.QuerySt) string {
		st.Where("id", 3)
		return st.GetWheres()
	}, func(st *orm.QuerySt) *orm.QuerySt {
	st.Value("stime", time.Now().Unix())
	return st
	})

15、根据条件设置执行delete语句

	sorm.MultiDelete(func(st *orm.QuerySt) string {
		st.Where("id", 111, orm.OP_GE)
		return st.GetWheres()
	})
	return

16、分表策略的管理,这里支持三种分表策略取模/整除/日期归档(适合日志类)

	sorm := models.NewOsUser()
	sorm->SetModTable(id) //根据id取模做分表,slot=16代表总共16张分表0-15  id%16=?代表在第几张分表
	//这里会自动检查表是否存在,不存在的话创建表,然后做两层缓存结构,内存缓存、文件缓存,如果内存中记录表已经存在则跳过建表的操作
	sorm->SetDevTable(id) //根据id除法分表,例如slot=100w 代表1-100在分表 0 101-200分表1 以此类推
	sorm->SetYmTable(id) //根据年或者月份做分表归档处理逻辑

17、sqlmap分表主要利用一个开源的包做结构体到map 或者 map到结构体的逆向反转

18、开始go plugins的支持

	使用go plugins的话需要编译开启cgo的支持

	CGO_ENABLED=1 go build -buildmode=plugin -o greeter.so main.go
	CGO_ENABLED=1 go build -o main demo.go


19、git免密push
生成公钥-然后配置到githun->setting->ssh & GPG kyes->添加配置上去
ssh-keygen -t ed25519 -C "xxx@xxx.com"
或者
ssh-keygen -t rsa -C "xxxxxx@yy.com"

验证配置是否正确
ssh -T git@github.com

找到.gitconfig新增如下配置,可以将https请求转换成ssh git请求
[url "git@github.com:"]   
    insteadOf="https://github.com/"

解决no supported authentication methods avaiable
在(小乌龟)向github远程推送文件的时候会报错 no supported authentication methods avaiable

解决方法:因为git(小乌龟)和Git的冲突我们需要把乌龟git设置改正如下。

找到TortoiseGit--》Settings(设置)--》Network(网络)

将SSH client指向E:\git\Git\usr\bin\ssh.exe (我的Git工具安装E盘)

这里更改ssh 路径的时候,要把上面的勾打上,点击应用,再确定

Documentation

Index

Constants

View Source
const (
	DT_SQL        = "sql"
	DT_AUTO       = "auto"
	OP_AS         = "AS"
	OP_MAX        = "MAX"
	OP_MIN        = "MIN"
	OP_SUM        = "SUM"
	OP_AVG        = "AVG"
	OP_COUNT      = "COUNT"
	OP_EQ         = "="
	OP_NE         = "<>"
	OP_GT         = ">"
	OP_LT         = "<"
	OP_GE         = ">="
	OP_LE         = "<="
	OP_FULLTEXT   = "AGAINST"
	OP_BETWEEN    = "BETWEEN"
	OP_NOTBETWEEN = "NOT BETWEEN"
	OP_LIKE       = "LIKE"
	OP_NOTLIKE    = "NOT LIKE"
	OP_REGEXP     = "REGEXP"
	OP_ISNULL     = "IS NULL"
	OP_ISNOTNULL  = "IS NOT NULL"
	OP_IN         = "IN"
	OP_NOTIN      = "NOT IN"
	OP_AND        = "AND"
	OP_OR         = "OR"
	OP_NOT        = "NOT"
	OP_SQL        = "SQL"
	ASC           = "ASC"
	DESC          = "DESC"
	POSTGRES      = "postgres"
	DT_TIMESTAMP  = 100
)
View Source
const (
	DATEBASICFormat  = "2006-01-02 15:04:05"
	DATEZONEFormat   = "2006-01-02T15:04:05Z"
	DATEYMDFormat    = "20060102"
	DATESTRFormat    = "20060102150405"
	DATEYMDSTRFormat = "2006-01-02"
)
View Source
const (
	DBVERCKEY = "dbver"
)

Variables

View Source
var (
	IsShowSql = true
	IsDebug   = false

	GdbPoolSt = XDBPoolSt{}
)
View Source
var (
	GdbCache        cache.Cacher = nil
	GmCache         cache.Cacher = nil
	GCacheKeyPrefix              = "go"
)
View Source
var Gmodelstpl = `` /* 599-byte string literal not displayed */

Functions

func CamelCase

func CamelCase(str string) string

下划线转成驼峰的格式

func CreateMYSQLModels added in v1.0.1

func CreateMYSQLModels(dbmaster, dbslaver, gdir, etables string)

@Summary 自动创建模型业务 DB隐射到Model @Tags 创建数据模型 @param dbmaster string 主数据库连接名称 @param dbslaver string 从数据库连接名称 @param gdir string 模型的存放路径 @param etables string 导致指定的表,默认空所有

func CreatePGSQLModels added in v1.0.1

func CreatePGSQLModels(dbmaster, dbslaver, gdir, etables string)

@Summary 自动创建模型业务 DB隐射到Model @Tags 创建数据模型 @param dbmaster string 主数据库连接名称 @param dbslaver string 从数据库连接名称 @param gdir string 模型的存放路径 @param etables string 导致指定的表,默认空所有

func CutPath

func CutPath(href string) string

将地址切割到path部分

func DT2UnixTimeStamp

func DT2UnixTimeStamp(sdt, format string) int64

根据时间格式获取unix时间的记录

func FileExists

func FileExists(path string) bool

判断文件是否存在

func GetLocalRandomIPv4

func GetLocalRandomIPv4() (string, error)

返回本机的随机IP一个内网IP地址

func GetMCache

func GetMCache() cache.Cacher

获取内存存储的缓存策略

func IdStr2Slice

func IdStr2Slice(idStr, seg, omit string) []string

根据逗号分割的id转slice

func NewMysql

func NewMysql() *mysqlSt

初始化一个语句结构体对象

func NumberString

func NumberString(nLen int) string

生成随机字符串

func RandString

func RandString(nLen int) string

生成随机字符串

func RemoteIp

func RemoteIp(req *http.Request) string

获取客户端IP

func RuntimeStack

func RuntimeStack(skip int) []byte

获取服务器panic 指定情况的获取写日志

func SetDBCache

func SetDBCache(c cache.Cacher)

设置数据库缓存 -默认空不做缓存

func SnakeCase

func SnakeCase(str string) string

将驼峰的命名格式反转过来

func SwapStringCrypt

func SwapStringCrypt(lStr string) string

简单的字符混淆

func TimeStampFormat

func TimeStampFormat(sec int64, layout string) string

这个时间格式填写golang诞辰 2006-01-02 15:04:05 等

func WritePidFile added in v1.0.1

func WritePidFile(name string)

启动之后写入pid file文件

Types

type CHandler

type CHandler func([]SqlMap) error //执行业务分页的执行业务逻辑

type DHandler

type DHandler func(st *QuerySt) interface{}

type DbConfig

type DbConfig struct {
	Driver       string `yaml:"driver"`
	Host         string `yaml:"host"`
	SKey         string `yaml:"skey"`
	MaxOpenConns int    `yaml:"maxOpenConns"`
	MaxIdleConns int    `yaml:"maxIdleConns"`
}

type FormatItemHandle

type FormatItemHandle func(sm SqlMap)

type IFModel added in v1.0.7

type IFModel interface {
	Format(handle FormatItemHandle) *ModelSt
	SetCache(cacheSt cache.Cacher) *ModelSt
	NoCache() *ModelSt
	GetSlot() int
	GetTable() string
	SetTable(table string) *ModelSt
	SetTx(tx *sqlx.Tx) *ModelSt
	ResetTable() *ModelSt
	SetModTable(idx int64) *ModelSt
	EqMod(idx, oidx int64) bool
	SetDevTable(idx int64) *ModelSt
	SetYmTable(format string) *ModelSt
	DBTables() []string
	CacheKey(ckey string) string
	Query() *QuerySt
	SetCacheVer()
	GetCacheVer() string
	GetHash(args ...interface{}) string
	IdClearCache(id interface{}) *ModelSt
	Conflict(fields string) *ModelSt
	NewOne(fields SqlMap, dupfields SqlMap) int64
	NewOneFromHandler(vhandler VHandler, dhandler DHandler) int64
	GetOne(id interface{}) SqlMap
	Save(id interface{}, fields SqlMap) int64
	SaveFromHandler(id interface{}, vhandler VHandler) int64
	MultiUpdate(whandler WHandler, vhandler VHandler) int64
	MultiUpdateCleanID(whandler WHandler, vhandler VHandler) int64
	Delete(id interface{}) int64
	MultiDelete(whandler WHandler) int64
	MultiDeleteCleanID(whandler WHandler) int64
	GetItem(cHandler WHandler, fields string, args ...string) SqlMap
	GetList(offset, limit int64, cHandler WHandler, fields string, args ...string) []SqlMap
	ChunkHandler(limit int64, fields string, cHandler CHandler, wHandler WHandler) (int64, error)
	GetColumn(offset, limit int64, cHandler WHandler, fields string, args ...string) []string
	GetAsMap(offset, limit int64, cHandler WHandler, fields string) SqlMap
	GetNameMap(offset, limit int64, cHandler WHandler, fields string, key string) map[string]SqlMap
	GetTotal(cHandler WHandler, fields string) SqlString
	GetValue(cHandler WHandler, fields string) SqlString
	IsExists(cHandler WHandler) SqlString
	GetAsSQL(sql string, offset, limit int64) []SqlMap
}

type ModelSt

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

定义数据模型的基础结构

func (*ModelSt) CacheKey

func (self *ModelSt) CacheKey(ckey string) string

缓存策略的key信息

func (*ModelSt) ChunkHandler

func (self *ModelSt) ChunkHandler(limit int64, fields string, cHandler CHandler, wHandler WHandler) (int64, error)

执行分页回调业务处理逻辑,这里最好自行orderby一下

func (*ModelSt) Conflict added in v1.0.6

func (self *ModelSt) Conflict(fields string) *ModelSt

替换导入的时候设置冲突唯一键字段,针对PG有效

func (*ModelSt) DBTables

func (self *ModelSt) DBTables() []string

获取当前表的所有分表记录

func (*ModelSt) Delete

func (self *ModelSt) Delete(id interface{}) int64

删除一条记录信息

func (*ModelSt) EqMod

func (self *ModelSt) EqMod(idx, oidx int64) bool

func (*ModelSt) Format

func (self *ModelSt) Format(handle FormatItemHandle) *ModelSt

主要用作处理数据的格式化逻辑

func (*ModelSt) GetAsMap

func (self *ModelSt) GetAsMap(offset, limit int64, cHandler WHandler, fields string) SqlMap

只获取数据信息列表key,val

func (*ModelSt) GetAsSQL

func (self *ModelSt) GetAsSQL(sql string, offset, limit int64) []SqlMap

通过SQL查询数据

func (*ModelSt) GetCacheVer

func (self *ModelSt) GetCacheVer() string

获取db存储的版本号

func (*ModelSt) GetColumn

func (self *ModelSt) GetColumn(offset, limit int64, cHandler WHandler, fields string, args ...string) []string

只获取数据信息列表

func (*ModelSt) GetHash

func (self *ModelSt) GetHash(args ...interface{}) string

查询条件hash成md5字符串

func (*ModelSt) GetItem

func (self *ModelSt) GetItem(cHandler WHandler, fields string, args ...string) SqlMap

获取一个选项记录信息

func (*ModelSt) GetList

func (self *ModelSt) GetList(offset, limit int64, cHandler WHandler, fields string, args ...string) []SqlMap

只获取数据信息列表

func (*ModelSt) GetNameMap

func (self *ModelSt) GetNameMap(offset, limit int64, cHandler WHandler, fields string, key string) map[string]SqlMap

获取命名map,key必须属于fields当中的字段

func (*ModelSt) GetOne

func (self *ModelSt) GetOne(id interface{}) SqlMap

获取一个对象实例

func (*ModelSt) GetSlot

func (self *ModelSt) GetSlot() int

func (*ModelSt) GetTable

func (self *ModelSt) GetTable() string

func (*ModelSt) GetTotal

func (self *ModelSt) GetTotal(cHandler WHandler, fields string) SqlString

获取一个选项记录信息

func (*ModelSt) GetValue

func (self *ModelSt) GetValue(cHandler WHandler, fields string) SqlString

获取一个选项记录信息

func (*ModelSt) IdClearCache

func (self *ModelSt) IdClearCache(id interface{}) *ModelSt

根据ID删除缓存策略

func (*ModelSt) Init

func (self *ModelSt) Init(dbPool *XDBPoolSt, data map[string]interface{}, fields map[string]reflect.Kind)

初始化模型 业务参数设定

func (*ModelSt) Instance added in v1.0.2

func (self *ModelSt) Instance() *ModelSt

获取模型数据资料信息

func (*ModelSt) IsExists

func (self *ModelSt) IsExists(cHandler WHandler) SqlString

获取一个选项记录信息

func (*ModelSt) MultiDelete

func (self *ModelSt) MultiDelete(whandler WHandler) int64

删除多条记录 单数缓存数据可能还是存在 通过id获取数据的情况

func (*ModelSt) MultiDeleteCleanID

func (self *ModelSt) MultiDeleteCleanID(whandler WHandler) int64

删除多条记录 清理关联记录缓存

func (*ModelSt) MultiUpdate

func (self *ModelSt) MultiUpdate(whandler WHandler, vhandler VHandler) int64

通过执行匿名函数实现数据更新关系绑定

func (*ModelSt) MultiUpdateCleanID

func (self *ModelSt) MultiUpdateCleanID(whandler WHandler, vhandler VHandler) int64

通过执行匿名函数实现数据更新关系绑定 清理关联记录缓存

func (*ModelSt) NewOne

func (self *ModelSt) NewOne(fields SqlMap, dupfields SqlMap) int64

表中新增一条记录 主键冲突且设置dup的话会执行后续配置的更新操作

func (*ModelSt) NewOneFromHandler

func (self *ModelSt) NewOneFromHandler(vhandler VHandler, dhandler DHandler) int64

通过执行匿名函数实现数据更新关系绑定

func (*ModelSt) NoCache

func (self *ModelSt) NoCache() *ModelSt

关闭换成策略

func (*ModelSt) Query

func (self *ModelSt) Query() *QuerySt

获取db查询的Query db要自行关闭哟

func (*ModelSt) ResetTable

func (self *ModelSt) ResetTable() *ModelSt

func (*ModelSt) Save

func (self *ModelSt) Save(id interface{}, fields SqlMap) int64

更新信息记录

func (*ModelSt) SaveFromHandler

func (self *ModelSt) SaveFromHandler(id interface{}, vhandler VHandler) int64

通过执行匿名函数实现数据更新关系绑定

func (*ModelSt) SetCache

func (self *ModelSt) SetCache(cacheSt cache.Cacher) *ModelSt

func (*ModelSt) SetCacheVer

func (self *ModelSt) SetCacheVer()

设定缓存的版本号数据信息

func (*ModelSt) SetDevTable

func (self *ModelSt) SetDevTable(idx int64) *ModelSt

func (*ModelSt) SetModTable

func (self *ModelSt) SetModTable(idx int64) *ModelSt

func (*ModelSt) SetTable

func (self *ModelSt) SetTable(table string) *ModelSt

func (*ModelSt) SetTx

func (self *ModelSt) SetTx(tx *sqlx.Tx) *ModelSt

func (*ModelSt) SetYmTable

func (self *ModelSt) SetYmTable(format string) *ModelSt

这个时间格式填写golang诞辰 2006-01-02 15:04:05 等

type QuerySt

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

func NewQuery

func NewQuery(fields map[string]reflect.Kind) *QuerySt

生成一个查询Session

func (QuerySt) AsSql

func (q QuerySt) AsSql(mode string) string

获取语句最终拼凑的SQL语句

func (QuerySt) Clear

func (q QuerySt) Clear(parts ...string) *mysqlSt

清除语句的部分信息

func (*QuerySt) CloseDB

func (q *QuerySt) CloseDB()

获取当前执行的查询DB信息

func (QuerySt) ConflictField

func (q QuerySt) ConflictField(field string) *mysqlSt

设置要冲突字段信息

func (*QuerySt) Delete

func (q *QuerySt) Delete() int64

执行数据删除操作

func (QuerySt) Duplicate

func (q QuerySt) Duplicate(field string, value interface{}, args ...string) *mysqlSt

更新字段值设置

func (*QuerySt) Exec

func (q *QuerySt) Exec(query string) sql.Result

执行一条SQL语句

func (QuerySt) Field

func (q QuerySt) Field(fields string) *mysqlSt

设置要查询的字段信息

func (QuerySt) ForceIndex

func (q QuerySt) ForceIndex(index string) *mysqlSt

设置GroupBy Having;一条语句只能设置一次

func (*QuerySt) GetAsSql

func (q *QuerySt) GetAsSql(query string, isFirst bool, offset, limit int64) []SqlMap

通过sql语句查询

func (*QuerySt) GetColumn

func (q *QuerySt) GetColumn(query string, offset, limit int64) []string

获取单列信息

func (*QuerySt) GetDb

func (q *QuerySt) GetDb() *sqlx.DB

获取当前执行的查询DB信息 需要及时释放,否则有问题

func (QuerySt) GetDriver

func (q QuerySt) GetDriver() string

获取数据库设置的驱动引擎

func (*QuerySt) GetFormat

func (q *QuerySt) GetFormat() FormatItemHandle

主要用作处理数据的格式化逻辑

func (*QuerySt) GetList

func (q *QuerySt) GetList(query string, offset, limit int64) []SqlMap

获取数据信息列表

func (*QuerySt) GetMap

func (q *QuerySt) GetMap(query string, offset, limit int64) SqlMap

获取单列信息 请求设置field 必须 `key`,val结构

func (*QuerySt) GetRow

func (q *QuerySt) GetRow(query string) SqlMap

如果查不到记录返回nil

func (*QuerySt) GetTx

func (q *QuerySt) GetTx() *sqlx.Tx

获取当前执行的查询DB信息 需要及时释放,否则有问题

func (*QuerySt) GetValue

func (q *QuerySt) GetValue() SqlString

获取某个值信息

func (QuerySt) GetWheres

func (q QuerySt) GetWheres() string

获取查询的where数据信息

func (QuerySt) GroupBy

func (q QuerySt) GroupBy(fields ...string) *mysqlSt

设置GroupBy分组

func (QuerySt) Having

func (q QuerySt) Having(having string) *mysqlSt

设置GroupBy Having;一条语句只能设置一次

func (*QuerySt) Insert

func (q *QuerySt) Insert(fields SqlMap, isReplace bool) int64

执行数据插入

func (*QuerySt) NameMap

func (q *QuerySt) NameMap(query, key string, offset, limit int64) map[string]SqlMap

获取数据信息到数组中

func (QuerySt) OrderBy

func (q QuerySt) OrderBy(field, dir string) *mysqlSt

设置排序信息 允许多列排序

func (*QuerySt) QueryInsert

func (q *QuerySt) QueryInsert(query string) int64

查询插入数据库-直接执行sql插入处理逻辑

func (QuerySt) RepSQL

func (q QuerySt) RepSQL(sql string) string

替换绑定变量到SQL当中处理

func (QuerySt) Reset

func (q QuerySt) Reset() *mysqlSt

结构体初始化内部结构

func (*QuerySt) SetAutoIncr

func (q *QuerySt) SetAutoIncr(field string) *QuerySt

主要用作自增字段,插入返回自增ID

func (*QuerySt) SetDb

func (q *QuerySt) SetDb(db *sqlx.DB) *QuerySt

获取当前执行的查询DB信息 需要及时释放,否则有问题

func (QuerySt) SetDriver

func (q QuerySt) SetDriver(driver string) *mysqlSt

设置数据库的的驱动引擎

func (*QuerySt) SetFormat

func (q *QuerySt) SetFormat(handle FormatItemHandle)

主要用作处理数据的格式化逻辑

func (QuerySt) SetIsReplace

func (q QuerySt) SetIsReplace(isReplace bool) *mysqlSt

设定插入的时候执行replace into

func (*QuerySt) SetTx

func (q *QuerySt) SetTx(tx *sqlx.Tx) *QuerySt

获取当前执行的查询DB信息 需要及时释放,否则有问题

func (QuerySt) Table

func (q QuerySt) Table(table ...string) *mysqlSt

设置查询的表信息

func (*QuerySt) Transaction

func (q *QuerySt) Transaction(handle TransactionHandle) bool

执行事务处理的业务逻辑封装

func (*QuerySt) Update

func (q *QuerySt) Update(fields SqlMap) int64

执行数据更新操作

func (QuerySt) UseBatch

func (self QuerySt) UseBatch(fields []string, value interface{}, options ...string) *mysqlSt

批量请求参数的处理业务逻辑 相同字段隐射到同一个东西

func (QuerySt) UseCond

func (self QuerySt) UseCond(fields []string, value interface{}, options ...string) *mysqlSt

批量请求参数的处理业务逻辑

func (QuerySt) Value

func (q QuerySt) Value(field string, value interface{}, args ...string) *mysqlSt

更新字段值设置

func (QuerySt) Where

func (q QuerySt) Where(field string, value interface{}, args ...string) *mysqlSt

添加条件配置

type SqlMap

type SqlMap map[string]interface{}

func (SqlMap) Clear added in v1.0.1

func (s SqlMap) Clear()

清空sqlmap

func (SqlMap) Delete

func (s SqlMap) Delete(keys ...string)

删除执行的key信息

func (SqlMap) IsNil

func (s SqlMap) IsNil() bool

判断是否为空对象

func (SqlMap) Merge

func (s SqlMap) Merge(m SqlMap) SqlMap

格式化处理逻辑

func (SqlMap) ToStruct

func (s SqlMap) ToStruct(stPtr interface{}) error

map 直接转成结构体返回

type SqlMapSliceSt added in v1.0.1

type SqlMapSliceSt []SqlMap

func (SqlMapSliceSt) Clear added in v1.0.1

func (s SqlMapSliceSt) Clear()

清理列表缓存的策略

type SqlString

type SqlString string

func (SqlString) ToFloat64 added in v1.0.1

func (s SqlString) ToFloat64() float64

强行转成整数

func (SqlString) ToInt64

func (s SqlString) ToInt64() int64

强行转成整数

func (SqlString) ToString added in v1.0.1

func (s SqlString) ToString() string

强行转成整数

type SqlTime added in v1.0.2

type SqlTime time.Time

func (SqlTime) String added in v1.0.2

func (t SqlTime) String() string

格式化输出日期

func (SqlTime) Value added in v1.0.2

func (t SqlTime) Value() (driver.Value, error)

格式化输出日期 --实现数据库的Value接口

type TransactionHandle

type TransactionHandle func(st *QuerySt) bool

type VHandler

type VHandler func(st *QuerySt) *QuerySt

type WHandler

type WHandler func(st *QuerySt) string

定义注册到条件的数据资料信息

type XDBPoolSt

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

*****************************************************************************

	     数据库的适配器,主要调整数据库与配置类 Redis与配置类的衔接,初始化数据库缓存
 *****************************************************************************

func InitDBPoolSt

func InitDBPoolSt() *XDBPoolSt

完成数据库的初始化处理逻辑

func (*XDBPoolSt) Config

func (p *XDBPoolSt) Config(skey string) *DbConfig

返回配置数据资料信息

func (*XDBPoolSt) Get

func (p *XDBPoolSt) Get(skey string) *sqlx.DB

获取数据库连接句柄

func (*XDBPoolSt) LoadDbConfig

func (p *XDBPoolSt) LoadDbConfig(confPtr interface{})

*

  • 数据库的配置 通过配置导入,配置必须传结构体指针 示例
  • @confPtr *Config 配置对象的指针变量
type Config struct {
	...
	Redis  cache.RedisConfig 	`yaml:"redis"`
	DbMaster  DbConfig 			`yaml:"dbmaster"`
	DbSlaver  DbConfig 			`yaml:"dbslaver"`
}

func (*XDBPoolSt) NewEngine

func (p *XDBPoolSt) NewEngine(skey string) *sqlx.DB

创建DB对象 提供给其他地方使用

func (*XDBPoolSt) Release

func (p *XDBPoolSt) Release()

释放db连接句柄信息

func (*XDBPoolSt) Set

func (p *XDBPoolSt) Set(skey string, config *DbConfig) *sqlx.DB

获取数据库连接句柄

Directories

Path Synopsis
Package mapstructure exposes functionality to convert one arbitrary Go type into another, typically to convert a map[string]interface{} into a native Go structure.
Package mapstructure exposes functionality to convert one arbitrary Go type into another, typically to convert a map[string]interface{} into a native Go structure.

Jump to

Keyboard shortcuts

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