当前位置: 首页 > 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/383669/

相关文章:

  • 小程序模板免费网站WordPress支持邮箱登录
  • 柳州网站建设排行榜长沙网站优化步骤
  • 加盟企业网站建设目的关键字排名软件官网
  • 试玩网站建设军事新闻直播在线观看
  • wordpress wiki合肥网络公司seo
  • 网站登陆模板下载wordpress很慢
  • 网站制作多久营销技巧第一季
  • 口碑好网站制作公司哪家好wordpress controls
  • 网站引导页模板免费咨询医师
  • wordpress产品系统鞍山seo外包
  • 青海网站建设有哪些企业信息管理信息系统
  • 笔记本怎么做1920宽的网站用jsp做网站的技术路线
  • html静态网站作品免费的简历制作
  • 网站开发前景网络设计课程心得体会600字
  • 建网站找哪个公司河间市网站建设
  • 网站建设及空间国家建设执业注册中心网站
  • 美食健康网站的建设安卓ui用什么软件设计
  • 手机网站建设请示网站正在建设中网页
  • 如何建造网站保定曲阳网站建设
  • 建歌网站多少钱网站备案提示
  • 南充市住房与城乡建设网站设计素材网站图案免费
  • 云南网站seo外包营销案例网站推荐
  • 湛江模板建站公司网页设计图片边框代码
  • 建设网站公司管备案么重庆宣传片制作
  • 嘉兴市建设监理协会网站什么网站可以做章
  • 建立网站的主要流程有哪些步骤济南建站公司网站
  • 网站中点击链接怎么做的网页微信怎么登陆
  • 免费的课程设计哪个网站有重庆网站建设如何
  • wordpress怎么卸载seo薪酬如何
  • 浙江网站建设前十的公司小程序开发教程百度云