中建八局第一建设公司网站,网站弹出,沈阳网站建设建设公司哪家好,专业建设规划方案模板一、什么是gorm 
GORM 是一个用于 Go 语言的 ORM#xff08;对象关系映射#xff09;库#xff0c;它提供了一种简单而强大的方式来与数据库进行交互。GORM 支持多种数据库#xff0c;包括 MySQL、PostgreSQL、SQLite、SQL Server 等#xff0c;并且提供了丰富的功能…一、什么是gorm 
GORM 是一个用于 Go 语言的 ORM对象关系映射库它提供了一种简单而强大的方式来与数据库进行交互。GORM 支持多种数据库包括 MySQL、PostgreSQL、SQLite、SQL Server 等并且提供了丰富的功能如自动迁移、预加载、事务管理等。 
二、特性 
全功能 ORM关联 (Has OneHas ManyBelongs ToMany To Many多态单表继承)CreateSaveUpdateDeleteFind 中钩子方法支持 Preload、Joins 的预加载事务嵌套事务Save PointRollback To Saved PointContext、预编译模式、DryRun 模式批量插入FindInBatchesFind/Create with Map使用 SQL 表达式、Context Valuer 进行 CRUDSQL 构建器Upsert数据库锁Optimizer/Index/Comment Hint命名参数子查询复合主键索引约束Auto Migration自定义 Logger灵活的可扩展插件 APIDatabase Resolver多数据库读写分离、Prometheus…每个特性都经过了测试的重重考验开发者友好 
三、安装 
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql 
四、集成 
func InitMySql() *gorm.DB {// 数据源设置db, err : gorm.Open(mysql.New(mysql.Config{DSN: viper.GetString(db.mysql.dsn),}),gorm.Config{NamingStrategy: schema.NamingStrategy{TablePrefix:   t_, SingularTable: true,},Logger:                                   logger.Default.LogMode(logger.Info), DisableForeignKeyConstraintWhenMigrating: true,                                },)if err ! nil {panic(err)}sqlDb, _ : db.DB()sqlDb.SetMaxOpenConns(viper.GetInt(db.mysql.maxOpenConns))sqlDb.SetMaxIdleConns(viper.GetInt(db.mysql.maxIdleConns))sqlDb.SetConnMaxLifetime(time.Hour)return db
}五、CRUD 接口 
创建记录 
user : User{Name: Jinzhu, Age: 18, Birthday: time.Now()}result : db.Create(user) // 通过数据的指针来创建user.ID             // 返回插入数据的主键
result.Error        // 返回 error
result.RowsAffected // 返回插入记录的条数 
查询 
GORM 提供了 First、Take、Last 方法以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件且没有找到记录时它会返回 ErrRecordNotFound 错误 
// 获取第一条记录主键升序
db.First(user)
// SELECT * FROM users ORDER BY id LIMIT 1;// 获取一条记录没有指定排序字段
db.Take(user)
// SELECT * FROM users LIMIT 1;// 获取最后一条记录主键降序
db.Last(user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1;result : db.First(user)
result.RowsAffected // 返回找到的记录数
result.Error        // returns error or nil// 检查 ErrRecordNotFound 错误
errors.Is(result.Error, gorm.ErrRecordNotFound) 
更新 
当使用 Update 更新单列时需要有一些条件否则将会引起ErrMissingWhereClause 错误。 当使用 Model 方法并且它有主键值时主键将会被用于构建条件例如 
// 根据条件更新
db.Model(User{}).Where(active  ?, true).Update(name, hello)
// UPDATE users SET namehello, updated_at2013-11-17 21:34:10 WHERE activetrue;// User 的 ID 是 111
db.Model(user).Update(name, hello)
// UPDATE users SET namehello, updated_at2013-11-17 21:34:10 WHERE id111;// 根据条件和 model 的值进行更新
db.Model(user).Where(active  ?, true).Update(name, hello)
// UPDATE users SET namehello, updated_at2013-11-17 21:34:10 WHERE id111 AND activetrue;删除 
删除一条记录时删除对象需要指定主键例如 
// Email 的 ID 是 10
db.Delete(email)
// DELETE from emails where id  10;// 带额外条件的删除
db.Where(name  ?, jinzhu).Delete(email)
// DELETE from emails where id  10 AND name  jinzhu;原生 SQL 
db.Exec(DROP TABLE users)
db.Exec(UPDATE orders SET shipped_at  ? WHERE id IN ?, time.Now(), []int64{1, 2, 3})// Exec with SQL Expression
db.Exec(UPDATE users SET money  ? WHERE name  ?, gorm.Expr(money * ?  ?, 10000, 1), jinzhu)更多 
请参考官网GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.