package CacheUtil import ( "dsDataex/Utils/ErrorConst" "dsDataex/Utils/CommonUtil" "dsDataex/Utils/DbUtil" "dsDataex/Utils/LogUtil" "dsDataex/Utils/RedisUtil" "time" ) /** 功能:用于将interface转为struct的结构体 作者:黄海 时间:2020-02-05 */ type Selector struct { TableName string PkField string RedisPrefix string } /** 功能:注册一个函数,用于提取计算指定数据表对应的相关信息 作者:黄海 时间:2020-03-27 */ func GetBean(tableName string) Selector { var m = new(Selector) m.TableName = tableName m.RedisPrefix = CommonUtil.GetSnakeCaseStr(tableName) + ":" _, m.PkField = GetTablePk(tableName) return *m } /** 功能:获取指定表的主键 作者:黄海 时间:2020-03-26 */ func GetTablePk(tableName string) (bool, string) { //优先到缓存中查找 key := "pk_" + tableName pk, err := RedisUtil.GET(key) if err != nil { sql := "select column_name from information_schema.`key_column_usage` where table_name=? and constraint_name='primary'" list, err := DbUtil.Engine.SQL(sql, tableName).Query().List() if err != nil || len(list) == 0 { LogUtil.Error(ErrorConst.SqlQueryError, err.Error()) return false, "" } pk = list[0]["column_name"].(string) //设置缓存 RedisUtil.SET(key, pk, 24*7*time.Hour) } return true, pk }