当前位置: 代码网 > it编程>前端脚本>Golang > go集成gorm数据库的操作代码

go集成gorm数据库的操作代码

2024年11月25日 Golang 我要评论
一、什么是gormgorm 是一个用于 go 语言的 orm(对象关系映射)库,它提供了一种简单而强大的方式来与数据库进行交互。gorm 支持多种数据库,包括 mysql、postgresql、sql

一、什么是gorm

gorm 是一个用于 go 语言的 orm(对象关系映射)库,它提供了一种简单而强大的方式来与数据库进行交互。gorm 支持多种数据库,包括 mysql、postgresql、sqlite、sql server 等,并且提供了丰富的功能,如自动迁移、预加载、事务管理等。

二、特性

  • 全功能 orm
  • 关联 (has one,has many,belongs to,many to many,多态,单表继承)
  • create,save,update,delete,find 中钩子方法
  • 支持 preloadjoins 的预加载
  • 事务,嵌套事务,save point,rollback to saved point
  • context、预编译模式、dryrun 模式
  • 批量插入,findinbatches,find/create with map,使用 sql 表达式、context valuer 进行 crud
  • sql 构建器,upsert,数据库锁,optimizer/index/comment hint,命名参数,子查询
  • 复合主键,索引,约束
  • auto migration
  • 自定义 logger
  • 灵活的可扩展插件 api:database 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 提供了 firsttakelast 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 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 name='hello', updated_at='2013-11-17 21:34:10' where active=true;
 
// user 的 id 是 `111`
db.model(&user).update("name", "hello")
// update users set name='hello', updated_at='2013-11-17 21:34:10' where id=111;
 
// 根据条件和 model 的值进行更新
db.model(&user).where("active = ?", true).update("name", "hello")
// update users set name='hello', updated_at='2013-11-17 21:34:10' where id=111 and active=true;

删除

删除一条记录时,删除对象需要指定主键,例如:

// 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")

到此这篇关于go集成gorm数据库操作代码的文章就介绍到这了,更多相关go集成gorm数据库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com