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

网站开发面试代理推广

网站开发面试,代理推广,wordpress门户信息主题,开发板一般在周几更新Golang 出色的 ORM 库为 GORM。 官网文档:https://gorm.io/docs/ 我们来说说增删改查的用法,更深入的研究可以去官网看看。 GORM功能概览: 关联(有一个、有多个、属于、多对多、多态性、单表继承)挂钩(创…

Golang 出色的 ORM 库为 GORM。

官网文档:https://gorm.io/docs/

我们来说说增删改查的用法,更深入的研究可以去官网看看。

GORM功能概览:

  • 关联(有一个、有多个、属于、多对多、多态性、单表继承)
  • 挂钩(创建/保存/更新/删除/查找之前/之后)
  • 急切加载Preload,Joins
  • 事务、嵌套事务、保存点、RollbackTo 到保存点
  • 上下文、准备语句模式、DryRun 模式
  • 批量插入、FindInBatches、使用 Map 查找/创建、使用 SQL Expr 和 Context Valuer 进行 CRUD
  • SQL 生成器、更新插入、锁定、优化器/索引/注释提示、命名参数、子查询
  • 复合主键、索引、约束
  • 自动迁移
  • 记录器
  • 可扩展、灵活的插件 API:Database Resolver(多个数据库、读/写拆分)/Prometheus...

  下载依赖

go -u gorm.io/gorm

表Model定义

GORM内置了一个gorm.Model结构体,gorm.Model包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间。如果表中定义了这种字段,GORM 在创建、更新和删除时会自动填充当前时间。

当然也可以不用gorm.Model,完全自定义创建、更新时间及其格式,这就需要在创建和更新时自己赋值并入库。

// 定义product表,使用gorm.Model结构体
type Product struct {gorm.ModelCode  stringPrice uint
}// 指定product表名
func (Product) TableName() string {return "product"
}

连接数据库

var db *gorm.DB// 连接数据库
func ConnDB() {var (Username = "root"Password = "123456"Endpoint = "localhost:3306"Database = "aiee"err      error)dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true&loc=Local",Username, Password, Endpoint, Database,)db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {fmt.Println("failed to connect database,", err.Error())return}// debug模式db = db.Debug()
}

数据插入

// 数据插入
func CreateProduct() error {var (product  = Product{Code: "D42", Price: 100}products = []Product{{Code: "D43", Price: 120},{Code: "D45", Price: 150},}err error)// 数据插入一条// 实际执行sql: INSERT INTO `product` (`created_at`,`updated_at`,`deleted_at`,`code`,`price`) VALUES ('2023-12-21 11:42:10.798','2023-12-21 11:42:10.798',NULL,'D42',100)err = db.Create(&product).Errorif err != nil {fmt.Println("failed to create data,", err.Error())return err}// 插入多条// 实际执行sql: INSERT INTO `product` (`created_at`,`updated_at`,`deleted_at`,`code`,`price`) VALUES ('2023-12-21 11:42:10.8','2023-12-21 11:42:10.8',NULL,'D43',120),('2023-12-21 11:42:10.8','2023-12-21 11:42:10.8',NULL,'D45',150)err = db.Create(&products).Errorif err != nil {fmt.Println("failed to create data,", err.Error())return err}return err
}

数据读取

// 数据读取
func ReadProduct() error {var (productById   ProductproductByCode Productproducts      []Producterr           error)// 通过主键ID查询一条// 实际执行sql: SELECT * FROM `product` WHERE `product`.`id` = 1 AND `product`.`deleted_at` IS NULL ORDER BY `product`.`id` LIMIT 1err = db.First(&productById, 1).Errorif err != nil {fmt.Println("failed to read first data by id,", err.Error())return err}fmt.Println(productById)// 通过code字段读取一条// 实际执行sql: SELECT * FROM `product` WHERE code = 'D42' AND `product`.`deleted_at` IS NULL ORDER BY `product`.`id` LIMIT 1err = db.First(&productByCode, "code = ?", "D42").Errorif err != nil {fmt.Println("failed to read first data by code,", err.Error())return err}fmt.Println(productByCode)// 读取列表// 实际执行sql: SELECT * FROM `product` WHERE `product`.`deleted_at` IS NULL LIMIT 10err = db.Limit(10).Find(&products).Errorif err != nil {fmt.Println("failed to read products,", err.Error())return err}fmt.Println(products)// Where条件查询// 实际执行sql: SELECT * FROM `product` WHERE code = 'D42' AND `product`.`deleted_at` IS NULL LIMIT 10err = db.Where("code = ?", "D42").Limit(10).Find(&products).Errorif err != nil {fmt.Println("failed to read products,", err.Error())return err}fmt.Println(products)return err
}

数据更新

// 更新数据
func UpdateProduct() error {var (product Producterr     error)// 通过主键ID查询一条err = db.First(&product, 1).Errorif err != nil {fmt.Println("failed to read first data by id,", err.Error())return err}// 更新查询的数据,Price=200// 实际执行sql: UPDATE `product` SET `price`=200,`updated_at`='2023-12-21 11:57:51.842' WHERE `product`.`deleted_at` IS NULL AND `id` = 1err = db.Model(&product).Update("price", 200).Errorif err != nil {fmt.Println("failed to update product,", err.Error())return err}// 更新查询的数据,使用Product更新多字段// 实际执行sql: UPDATE `product` SET `updated_at`='2023-12-21 11:57:51.845',`code`='F41',`price`=200 WHERE `product`.`deleted_at` IS NULL AND `id` = 1err = db.Model(&product).Updates(Product{Price: 200, Code: "F41"}).Errorif err != nil {fmt.Println("failed to update product,", err.Error())return err}// 更新查询的数据,使用map更新多字段// 实际执行sql: UPDATE `product` SET `code`='F42',`price`=200,`updated_at`='2023-12-21 11:57:51.847' WHERE `product`.`deleted_at` IS NULL AND `id` = 1err = db.Model(&product).Updates(map[string]interface{}{"price": 200, "code": "F42"}).Errorif err != nil {fmt.Println("failed to update product,", err.Error())return err}// Where条件更新数据// 实际执行sql: UPDATE `product` SET `code`='F42',`price`=200,`updated_at`='2023-12-21 11:57:51.848' WHERE code = 'D42' AND `product`.`deleted_at` IS NULLerr = db.Model(&Product{}).Where("code = ?", "D42").Updates(map[string]interface{}{"price": 200, "code": "F42"}).Errorif err != nil {fmt.Println("failed to update product,", err.Error())return err}return err
}

数据删除

func DeleteProduct() error {var (product Producterr     error)// 通过ID删除数据// 实际执行sql: UPDATE `product` SET `deleted_at`='2023-12-21 12:01:41.257' WHERE `product`.`id` = 1 AND `product`.`deleted_at` IS NULLerr = db.Delete(&product, 1).Errorif err != nil {fmt.Println("failed to delete first data by id,", err.Error())return err}// 通过code删除数据// 实际执行sql: UPDATE `product` SET `deleted_at`='2023-12-21 12:03:06.449' WHERE code = 'D42' AND `product`.`deleted_at` IS NULLerr = db.Delete(&product, "code = ?", "D42").Errorif err != nil {fmt.Println("failed to delete first data by id,", err.Error())return err}// 通过Where条件删除数据// 实际执行sql: UPDATE `product` SET `deleted_at`='2023-12-21 12:04:38.424' WHERE id < 2 AND `product`.`deleted_at` IS NULLerr = db.Where("id < ?", 2).Delete(&product).Errorif err != nil {fmt.Println("failed to delete first data by id,", err.Error())return err}return err
}


文章转载自:
http://pashm.c7498.cn
http://gipsyhood.c7498.cn
http://outhit.c7498.cn
http://phlebography.c7498.cn
http://warily.c7498.cn
http://corniculate.c7498.cn
http://dykey.c7498.cn
http://reiterative.c7498.cn
http://palish.c7498.cn
http://steak.c7498.cn
http://oncology.c7498.cn
http://athetoid.c7498.cn
http://psychotechnics.c7498.cn
http://impersonal.c7498.cn
http://swazzle.c7498.cn
http://boniness.c7498.cn
http://spaceless.c7498.cn
http://fhlbb.c7498.cn
http://listserv.c7498.cn
http://subinfeud.c7498.cn
http://diploid.c7498.cn
http://whites.c7498.cn
http://ingratiatory.c7498.cn
http://philosophaster.c7498.cn
http://counterproposal.c7498.cn
http://kedge.c7498.cn
http://negritic.c7498.cn
http://iberian.c7498.cn
http://partisan.c7498.cn
http://begat.c7498.cn
http://tmo.c7498.cn
http://heavier.c7498.cn
http://periventricular.c7498.cn
http://incontinent.c7498.cn
http://aesthetic.c7498.cn
http://gnat.c7498.cn
http://sarcophagus.c7498.cn
http://copyboy.c7498.cn
http://fascicled.c7498.cn
http://knurled.c7498.cn
http://diaplasis.c7498.cn
http://dogsleep.c7498.cn
http://sturt.c7498.cn
http://dressage.c7498.cn
http://vicariance.c7498.cn
http://dona.c7498.cn
http://yapon.c7498.cn
http://increment.c7498.cn
http://blessing.c7498.cn
http://pediculous.c7498.cn
http://hybridization.c7498.cn
http://tope.c7498.cn
http://gladiator.c7498.cn
http://unjelled.c7498.cn
http://ugt.c7498.cn
http://alternatively.c7498.cn
http://unilluminating.c7498.cn
http://khaibar.c7498.cn
http://unsurpassable.c7498.cn
http://semicoagulated.c7498.cn
http://bahadur.c7498.cn
http://tuition.c7498.cn
http://movieola.c7498.cn
http://molechism.c7498.cn
http://askari.c7498.cn
http://agonist.c7498.cn
http://boutonniere.c7498.cn
http://hydrophobe.c7498.cn
http://oppugnant.c7498.cn
http://roady.c7498.cn
http://inofficial.c7498.cn
http://seismometer.c7498.cn
http://urediospore.c7498.cn
http://chemurgy.c7498.cn
http://pargyline.c7498.cn
http://biogeography.c7498.cn
http://menotaxis.c7498.cn
http://andaman.c7498.cn
http://suspectable.c7498.cn
http://secluded.c7498.cn
http://gangsa.c7498.cn
http://amende.c7498.cn
http://enshield.c7498.cn
http://saxtuba.c7498.cn
http://snailfish.c7498.cn
http://rm.c7498.cn
http://limaciform.c7498.cn
http://skep.c7498.cn
http://unmerge.c7498.cn
http://beluga.c7498.cn
http://cappie.c7498.cn
http://accusal.c7498.cn
http://armarian.c7498.cn
http://ideaistic.c7498.cn
http://forwhy.c7498.cn
http://newswriting.c7498.cn
http://boulangerite.c7498.cn
http://monometer.c7498.cn
http://certify.c7498.cn
http://geometrical.c7498.cn
http://www.zhongyajixie.com/news/77104.html

相关文章:

  • 合肥专业做网站今日热点新闻事件标题
  • WordPress 和magento惠州百度seo哪家好
  • 做竞价网站自媒体平台注册
  • 专门做团购的网站有哪些中国教育培训网
  • 做的公司网站风格跟样式和别人一样网站建设方案范文
  • 番禺网站建设公司百度在西安的公司叫什么
  • 浙江创新网站建设销售扬州seo推广
  • 做网站 套用模板之后用什么改广告营销包括哪些方面
  • 建设建设网站的千峰培训可靠吗?
  • 长春网站建设v1视频推广平台
  • wordpress 相册 主题郑州百度网站优化排名
  • java网站开发前景网站底部友情链接代码
  • 可以做软件的网站百度百度百度一下
  • 用discuz做交友网站app推广注册放单平台
  • 如何获得个人免费网站空间网络游戏推广怎么做
  • 和幼儿做网站东莞百度快速排名优化
  • 辽宁建设工程信息网招标文件怎么打开网站优化排名网站
  • wordpress多站点配置教程口碑营销案例简短
  • 广州住建厅官方网站商品seo优化是什么意思
  • 做番号网站犯法吗品牌营销策划公司排名
  • 青岛网站设计流程自己可以做网站吗
  • 淘宝做导航网站有哪些外贸网站平台有哪些
  • 国贸网站建设官网站内推广内容
  • 怎样建设电子商务网站搜索引擎优化实训报告
  • 各大网站查重率比较哈尔滨网站优化
  • 怎么自己在家做网站药品网络营销公司
  • 建立网站内容需要做的事热搜榜排名今日第一
  • 温州做网站公司网络营销的概念及特点
  • 开展农业信息网站建设工作免费网站制作教程
  • 吉林省 网站建设外贸b2b平台都有哪些网站