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

奉贤网站建设专家wordpress大学模板2.7

奉贤网站建设专家,wordpress大学模板2.7,wordpress文章指定数量,轻淘客网站建设文章目录添加单条记录直接添加模型对象赋予默认值方法一#xff1a; gorm 标签赋予默认值方法二#xff1a; 设置钩子方法#xff08;Hooks#xff09;指定字段插入插入时忽略某些字段插入时禁止使用钩子方法添加多条记录通过对象列表插入通过字典列表插入在字典中使用SQL内… 文章目录添加单条记录直接添加模型对象赋予默认值方法一 gorm 标签赋予默认值方法二 设置钩子方法Hooks指定字段插入插入时忽略某些字段插入时禁止使用钩子方法添加多条记录通过对象列表插入通过字典列表插入在字典中使用SQL内置函数关联插入取消关联插入取消指定关联插入取消所有关联插入冲突忽略冲突出现冲突修改行记录出现冲突时修改字段为新的值出现冲突时修改指定字段为新的值出现冲突时修改指定字段内容使用内置函数模型定义以及Gorm初始化请参考上一篇文章 https://mingvvv.blog.csdn.net/article/details/129026914 首先初始化连接池 db : cus_orm.MysqlConnection()添加单条记录 直接添加模型对象 使用 Debug() 可以打印出 SQL 语句开发时使用便于观察 user : model.User{Name: 姓名, } // 添加一条 if err : db.Debug().Create(user).Error; err ! nil {fmt.Println(err)return } ------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time) VALUES (姓名,,18,这是一条默认描述,NULL,2023-03-01 15:24:56,2023-03-01 15:24:56)这里的对象中我们只给 Name 赋值但是在实际执行的 SQL 中其他字段也有值原因如下 赋予默认值方法一 gorm 标签 赋予默认值方法二 设置钩子方法Hooks 为结构体添加以下方法 在模型对象创建的时候会依次调用这四个方法执行循序为 BeforeSave BeforeCreate AfterCreate AfterSave 因此我们可以在这些方法里面对对象做一些操作如下对CreateTime、UpdateTime、 UserDesc 做了简单的赋值 ... ... func (u *User) BeforeCreate(tx *gorm.DB) (err error) {u.CreateTime time.Unix(time.Now().Unix(), 0) //初始化创建时间u.UpdateTime time.Unix(time.Now().Unix(), 0) //初始化修改时间u.UserDesc 这是一条默认描述fmt.Println(BeforeCreate -- Auto Setting)return } ... ...指定字段插入 db.Debug().Select(Name).Create(user) db.Debug().Select(Name,UserDesc).Create(user) --------------------------- INSERT INTO user (name) VALUES (姓名) INSERT INTO user (name,user_desc) VALUES (姓名,这是一条默认描述)插入时忽略某些字段 忽略 UpdateTime db.Debug().Omit(UpdateTime).Create(user) ---------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,id) VALUES (姓名,,18,这是一条默认描述,NULL,2023-03-01 15:50:59,539)插入时禁止使用钩子方法 有的时候我们在保存时可能不需要狗子方法帮我们预处理数据所以我们要禁用钩子方法 使用 Session(gorm.Session{SkipHooks: true})会发现我们上面在钩子方法没有执行 import gorm.io/gorm db.Debug().Omit(UpdateTime).Session(gorm.Session{SkipHooks: true}).Create(user) ------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time) VALUES (姓名,,18,,NULL,0000-00-00 00:00:00,0000-00-00 00:00:00)添加多条记录 通过对象列表插入 CreateInBatches(users, 100) 100表示每次插入的最大行数量。列表内的对象数量大于这个值时会分批次插入每批次最大 100 行 users : []model.User{ {Name: 测试goper111,},{Name: 测试goper222,},{Name: 测试goper333,}, } db.Debug().CreateInBatches(users, 100) -------------------------------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time) VALUES (测试goper111,,18,这是一条默认描述,NULL,2023-03-01 16:04:18,2023-03-01 16:04:18), (测试goper222,,18,这是一条默认描述,NULL,2023-03-01 16:04:18,2023-03-01 16:04:18), (测试goper333,,18,这是一条默认描述,NULL,2023-03-01 16:04:18,2023-03-01 16:04:18)通过字典列表插入 db.Model(model.User{}).Debug().Create([]map[string]interface{}{{Name: 姓名1, Age: 18},{Name: 姓名2, Age: 20}, }) ------------------- INSERT INTO user (age,name) VALUES (18,姓名1), (20,姓名2)在字典中使用SQL内置函数 使用 clause.Expr{SQL: “内置函数”, Vars: []interface{}{参数对象}} import gorm.io/gorm/clausedb.Model(model.User{}).Debug().Create([]map[string]interface{}{{Name: clause.Expr{SQL: Concat(?,?), Vars: []interface{}{姓名, 拼接}}, Age: 18}, }) ---------------------------------------- INSERT INTO user (age,name) VALUES (18,Concat(姓名,拼接))还有一种方法也可以使用内置函数但是需要提前自定义数据类型比较繁琐。 实现过程可参考以下地址 https://gorm.io/docs/data_types.html#GormValuerInterface 关联插入 在结构体 User 中我们最后两个字段关联了其他两个表。 如果我们要插入的对象中这两个元素不是空值那么这两个结构体对应的表也会插入数据。 需要注意的是 上图红框中我们制定了外键关系即这两个表的 user_id 就是 user 表的外键所以在插入时这两个表的 user_id 会自动赋值为 user 表的 id user2 : model.User{Name: 姓名,UserRole: model.UserRole{RoleId: 1,},UserExtend: model.UserExtend{Gender: 1,}, } db.Debug().Create(user2) -------------------------------------------- INSERT INTO user_role (user_id,role_id) VALUES (546,1) ON DUPLICATE KEY UPDATE user_idVALUES(user_id) INSERT INTO user_extend (user_id,gender) VALUES (546,1) ON DUPLICATE KEY UPDATE user_idVALUES(user_id) INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time) VALUES (姓名,,18,这是一条默认描述,NULL,2023-03-01 16:22:25,2023-03-01 16:22:25)取消关联插入 取消指定关联插入 以下取消了 user_role 表的关联插入 user2 : model.User{Name: 姓名,UserRole: model.UserRole{RoleId: 1,},UserExtend: model.UserExtend{Gender: 1,}, } db.Debug().Omit(UserRole).Create(user2) ----------------------------------------- INSERT INTO user_extend (user_id,gender) VALUES (547,1) ON DUPLICATE KEY UPDATE user_idVALUES(user_id) INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time) VALUES (姓名,,18,这是一条默认描述,NULL,2023-03-01 16:29:09,2023-03-01 16:29:09)取消所有关联插入 import gorm.io/gorm/clause user2 : model.User{Name: 姓名,UserRole: model.UserRole{RoleId: 1,},UserExtend: model.UserExtend{Gender: 1,}, } db.Debug().Omit(clause.Associations).Create(user2) ----------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time) VALUES (姓名,,18,这是一条默认描述,NULL,2023-03-01 16:29:09,2023-03-01 16:29:09)冲突 我们在创建表的时候会创建一些唯一索引这样的索引对应的列在表内是不允许存在重复数据的。 当我们插入了重复数据后插入会报错。针对这种情况我们可以忽略这些冲突或者将插入操作转变为修改操作。 忽略冲突 当出现冲突时将id修改为id实质上相当于什么也没做 user : model.User{Id: 521,Name: 姓名,JsonField: map[string]string{test: test}, } db.Debug().Clauses(clause.OnConflict{DoNothing: true}).Create(user) -------------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time,id) VALUES (姓名,,18,这是一条默认描述,{test:test},2023-03-01 16:55:24,2023-03-01 16:55:24,521) ON DUPLICATE KEY UPDATE idid出现冲突修改行记录 出现冲突时修改字段为新的值 user : model.User{Id: 521,Name: 姓名,JsonField: map[string]string{test: test}, } db.Debug().Clauses(clause.OnConflict{UpdateAll: true}).Create(user) --------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time,id) VALUES (姓名,,18,这是一条默认描述,{test:test},2023-03-01 17:20:13,2023-03-01 17:20:13,521) ON DUPLICATE KEY UPDATE nameVALUES(name),infant_nameVALUES(infant_name),ageVALUES(age),user_descVALUES(user_desc),json_fieldVALUES(json_field),create_timeVALUES(create_time),update_timeVALUES(update_time)出现冲突时修改指定字段为新的值 db.Debug().Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns([]string{json_field, name}), }).Create(user) --------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time,id) VALUES (姓名,,18,这是一条默认描述,{test:test},2023-03-01 17:17:35,2023-03-01 17:17:35,521) ON DUPLICATE KEY UPDATE user_descVALUES(user_desc),nameVALUES(name)出现冲突时修改指定字段内容 db.Debug().Clauses(clause.OnConflict{DoUpdates: clause.Assignments(map[string]interface{}{user_desc: 冲突后做了修改}), }).Create(user) -------------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time,id) VALUES (姓名,,18,这是一条默认描述,{test:test},2023-03-01 16:51:45,2023-03-01 16:51:45,521) ON DUPLICATE KEY UPDATE user_desc冲突后做了修改使用内置函数 db.Debug().Clauses(clause.OnConflict{DoUpdates: clause.Assignments(map[string]interface{}{user_desc: gorm.Expr(Concat(测试, 拼接))}), }).Create(user) -------------------------------------------------- INSERT INTO user (name,infant_name,age,user_desc,json_field,create_time,update_time,id) VALUES (姓名,,18,这是一条默认描述,{test:test},2023-03-01 17:15:17,2023-03-01 17:15:17,521) ON DUPLICATE KEY UPDATE user_descConcat(测试, 拼接)
http://www.hkea.cn/news/14493254/

相关文章:

  • 用qq邮箱做网站在线flash相册网站源码
  • 网站定位模板制作wordpress模板教程
  • 汇鑫网站建设便捷wap 手机网站建设
  • 简要描述网站开发过程成都网站建设网站建设
  • 省通信管理局 网站备案制度流程东莞最新消息 今天
  • 网站设计的思路最差网站设计
  • 数字货币网站开发需求网站内容页设计
  • 从什么网站找做游戏的代码做网页需要学什么语言
  • 如何给英文网站做外链网站地图对seo的影响
  • 平面设计和室内设计的区别外贸网站如何优化
  • 行业网站运营浙江平湖建设局网站
  • 使用asp.net制作网站的整体过程网站建设下什么费用
  • 织梦网站转移如何做考试网站
  • 闸北企业网站制作计算机网络技术就业方向及前景
  • 遂宁市建设银行网站怎样建设一个游戏网站
  • 北京建设网站公司一个网页
  • 做网站 南京桐乡市建设局网站大通酩悦
  • 做网站一定要用cms吗wordpress修改自适应
  • 做宣传网站网站建设公司响应式网站模板
  • 耳机商城网站开发北京建设工程招标信息网
  • 石家庄企业网站建设公司手机做app的软件有哪些
  • 网站 开发 周期怎么建立网站模版
  • 学校网站建设集约化网站数据库建设规范
  • 最新国际军事动态宁波seo外包公司
  • 北京网站搭建公司电话金华外贸网站建设
  • 网站提交搜索引擎后出现问题网站排名费用
  • 徐州网站推广优化品牌网站设计公司哪家好
  • 成都企业网站网络营销html5编辑器
  • 带后台的手机网站源码微信小程序 WordPress php
  • 即墨网站建设即墨中华室内设计网节点图