当前位置: 首页 > news >正文

贵阳市城乡建设局网站怎么做一个个人网站

贵阳市城乡建设局网站,怎么做一个个人网站,天津网站建设价格多少,建设部网站资质查询golang gorm通过泛型实现通用单表增删改 无废话,直接上代码 想实现通用,首先得实现查询的通用,可以用传递map实现 func Where(where map[string]interface{}) func(db *gorm.DB) *gorm.DB {return func(db *gorm.DB) *gorm.DB {dbTmp : db…

golang gorm通过泛型实现通用单表增删改

无废话,直接上代码

想实现通用,首先得实现查询的通用,可以用传递map实现

func Where(where map[string]interface{}) func(db *gorm.DB) *gorm.DB {return func(db *gorm.DB) *gorm.DB {dbTmp := dbfor ko, value := range where {koSlice := strings.Split(ko, "#")var key, op stringif len(koSlice) == 1 {key = koif php2go.InArray(key, []string{"select", "order", "offset", "limit"}) {op = ko} else {op = "eq"}} else {key = koSlice[0]op = koSlice[1]}switch op {case "eq":dbTmp.Where(key+" = ?", value)case "neq":dbTmp.Where(key+" != ?", value)case "gt":dbTmp.Where(key+" > ?", value)case "gte":dbTmp.Where(key+" >= ?", value)case "lt":dbTmp.Where(key+" < ?", value)case "lte":dbTmp.Where(key+" <= ?", value)case "like":dbTmp.Where(key+" like ?", "%"+value.(string)+"%")case "in":dbTmp.Where(key+" in ?", value)case "notin":dbTmp.Where(key+" not in ?", value)case "between":dbTmp.Where(key+" between ? and ?", value.([]int)[0], value.([]int)[1])case "betweens":dbTmp.Where(key+" between ? and ?", value.([]string)[0], value.([]string)[1])case "select":dbTmp.Select(value.(string))case "order":dbTmp.Order(value.(string))case "offset":dbTmp.Offset(value.(int))case "limit":dbTmp.Limit(value.(int))}}return dbTmp}
}

调用方式

examleWhere := map[string]interface{}{"name#like":           data.ToUserName,"id":        		   data.UserID,"create_time#between": []int{17000000, 18000000},"grade#in":            []int{3,4},"order":               "id desc",}
Gorm().Table("xxx").Scopes(Where(examleWhere)).xxx打印 sql:
select * from xxx where name like "%xx%" and id = xxx and create_time between 17xxx and 18xxx and grade in (3,4) order by id desc

通用查询

type FieldType interface {uint | uint8 | uint16 | uint32 | uint64 | int | int8 | int16 | int32 | int64 | float32 | float64 | string
}
func Get[T any](where map[string]interface{}, field ...string) (ret T, err error) {db := sys.Gorm().Scopes(Where(where)).Where("delete_time = 0")if len(field) > 0 {db.Select(field)}err = db.Find(&ret).Errorreturn
}func GetVal[T FieldType](tableName string, where map[string]interface{}, field string, includeDel ...bool) (ret T, err error) {db := sys.Gorm().Table(tableName).Scopes(Where(where)).Select(field)if len(includeDel) > 0 && includeDel[0] == true {db.Unscoped()} else {db.Where("delete_time = 0")}err = db.Find(&ret).Errorreturn
}func Gets[T any](where map[string]interface{}, field ...string) (ret []T, err error) {db := sys.Gorm().Scopes(Where(where)).Where("delete_time = 0")if len(field) > 0 {db.Select(field)}err = db.Find(&ret).Errorreturn
}func GetSlice[T FieldType](tableName string, where map[string]interface{}, field string, includeDel ...bool) (ret []T, err error) {ret = make([]T, 0)db := sys.Gorm().Table(tableName).Scopes(Where(where)).Select(field)if len(includeDel) > 0 && includeDel[0] == true {db.Unscoped()} else {db.Where("delete_time = 0")}err = db.Find(&ret).Errorreturn
}func Update[T any](where map[string]interface{}, update T) (err error) {db := sys.Gorm()err = db.Scopes(Where(where)).Updates(update).Errorreturn
}func UpdateByMap(table string, where, update map[string]interface{}) (err error) {db := sys.Gorm().Table(table)err = db.Scopes(Where(where)).Updates(update).Errorreturn
}func UpdateByMapTx(tx *gorm.DB, table string, where, update map[string]interface{}) (err error) {db := tx.Table(table)err = db.Scopes(Where(where)).Updates(update).Errorreturn
}// Create
// doUpdate: on duplicate key update : all, []string{}...
func Create[T any](data *[]T, doUpdate ...string) (err error) {var db *gorm.DBif len(doUpdate) > 0 {if doUpdate[0] == "all" {db = sys.Gorm().Clauses(clause.OnConflict{UpdateAll: true,}).Scopes()} else {db = sys.Gorm().Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns(doUpdate),}).Scopes()}} else {db = sys.Gorm().Scopes()}err = db.Create(&data).Errorreturn
}func CreateTx[T any](tx *gorm.DB, data *T, doUpdate ...string) (err error) {if len(doUpdate) > 0 {if doUpdate[0] == "all" {tx.Clauses(clause.OnConflict{UpdateAll: true,}).Scopes()} else {tx.Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns(doUpdate),}).Scopes()}}err = tx.Create(&data).Errorreturn
}func CreatesTx[T any](tx *gorm.DB, data *[]T, doUpdate ...string) (err error) {if len(doUpdate) > 0 {if doUpdate[0] == "all" {tx.Clauses(clause.OnConflict{UpdateAll: true,}).Scopes()} else {tx.Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns(doUpdate),}).Scopes()}}err = tx.Create(&data).Errorreturn
}

给出调用方式案例

model.Get[model.WwStaff](map[string]interface{}{"corp_id": req.CorpId, "userid": req.StaffUserid})model.GetVal[int]("table_name", map[string]interface{}{"corp_id":     corpId,"dept_id":     deptId,"delete_time": 0,}, "parentid")model.GetSlice[int64]("table_name",map[string]interface{}{"staff_id": req.Id}, "id")// insert ...
model.Create(&tableModel)
// insert ... ON DUPLICATE KEY UPDATE id = VALUES(id) ......
model.Create(&tableModel, "id", "update_time")model.UpdateByMap("table_name",map[string]interface{}{"id#in": roomUnionIds},map[string]interface{}{"upload": 2})model.UpdateByMapTx(tx, "table_name",map[string]interface{}{"id#in": roomUnionIds},map[string]interface{}{"upload": 2})

可以依照代码,写出其它灵活的使用方式
结束

http://www.yayakq.cn/news/582534/

相关文章:

  • 浙江网站推广公司龙港哪里有做百度网站的
  • 网站怎样绕过360认证泉州英文网站建设
  • 自己做的网站图片不显示由音乐学院做的网站
  • 无站点推广就是不在网上推广自己搭建ddns动态域名解析
  • thinkphp旅游网站源码iis7 wordpress伪静态
  • 网站怎么做留言提交功能汕头seo推广优化
  • 门户网站流量手机下载国外网页视频
  • 为什么做图书管理网站驾校网站模板
  • 网站大全全部免费app制作定制外包服务商e
  • 能打开任何网站浏览器台前做网站的公司
  • asp.net不适合做网站深圳市手机网站建设公司
  • 七星彩网站建设江阴公司网站建设
  • 沈阳网站制作的公司公司执照注册流程及费用
  • 谈期刊网站建设wordpress 作品集是什么
  • 利用店铺网站做灰色优化吉林市做网站的科技公司
  • 外贸婚纱礼服网站检测asp网站死循环
  • 网站管理助手 mysql电大考试亿唐网不做网站做品牌
  • 一个网站余姚什么青岛企业网站seo技巧
  • 荆门网站制作wordpress 配置安装
  • 世界上做的最好的前端网站电商平台技术开发方案
  • 网站的开发与设计网站开发文献翻译
  • 阿尔及利亚网站后缀沈阳网站设计推广
  • asp网站搭建软件给网站做排名优化学什么好
  • 用ps做的网站怎么发布WordPress简洁主题单栏
  • 鹤岗商城网站建设厦门小鱼网
  • 做设计私活的网站石景山保安公司
  • 给自己女朋友做的网站wordpress 合同
  • 找深圳网站建设wordpress环境包
  • 百度seo网站wordpress转换emlog
  • 网站托管服务合同范本企业网站建设能开广告服务费吗