前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >介绍一个超好用的orm库gorm【Golang 入门系列十二】

介绍一个超好用的orm库gorm【Golang 入门系列十二】

作者头像
架构师精进
发布2019-08-27 09:46:52
3K0
发布2019-08-27 09:46:52
举报
文章被收录于专栏:公众号文章公众号文章

之前在已经介绍了用的github.com/go-sql-driver/mysql 访问数据库,不太了解的可以看看之前的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html。

实际上,为提高开发效率,一般都会使用一些orm框架,把数据库层屏蔽,用户看到的只有对象而无需我们手动做一些转换,这样在使用的时候就非常方便。这种操作方式基本上已经成了标准做法。golang也有很多优秀的orm框架,今天就来介绍介绍gorm。

Gorm的功能

  • hook机制(Before/After Create/Save/Update/Delete/Find)
  • 对象关系Has One, Has Many, Belongs To, Many To Many, Polymorphism
  • 热加载
  • 支持原生sql操作
  • 事务性
  • 链式api
  • 支持的数据库有:mysql、postgre、sqlite、sqlserver
  • 查询操作

以上是gorm的功能,至于为什么是gorm?gorm 跟其他框架有什么不一样?这里就不在介绍了。直接讲用法吧。

库安装

代码语言:javascript
复制
go get -u github.com/jinzhu/gorm
代码语言:javascript
复制

数据库连接

代码语言:javascript
复制
db, err = gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/irisapp?charset=utf8&parseTime=True&loc=Local")
if err != nil {
   panic("连接数据库失败")
}
代码语言:javascript
复制

连接比较简单,直接调用 gorm.Open 传入数据库地址即可。gorm支持基本上所有主流的关系数据库,只是连接方式上略有不同,这里我用的 mysql为例吧。

表定义

代码语言:javascript
复制
type Product struct {
    ID        int    `gorm:"primary_key"`
    Code      string `gorm:"type:varchar(20);"`
    Price     int     `gorm:"type:int;"`
    Name      string `gorm:"type:varchar(64);"`
    Mail      string `gorm:"type:varchar(256);"`
    CreatedAt time.Time
}

创建表

代码语言:javascript
复制
if !db.HasTable(&Like{}) {
    if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Product{}).Error; err != nil {
      panic(err)
    }
}
代码语言:javascript
复制

直接通过 db.CreateTable 就可以创建表了,非常方便,还可以通过 db.Set 设置一些额外的表属性

另外,还有自动同步创建表的方法:

代码语言:javascript
复制
// 自动迁移模式
db.AutoMigrate(&Product{})
代码语言:javascript
复制

查询

代码语言:javascript
复制
var product Product
db.First(&product, 1) // 查询id为1的product
db.First(&product, "code = ?", "ik01001") // 查询code为l1212的product
代码语言:javascript
复制

插入

代码语言:javascript
复制
// 创建
db.Create(&Product{Code: "ik01001", Price: 1000})

构造已给对象,直接调用 db.Create() 就可以插入一条记录。不用拼接sql语句,是不是很方便。

更新

代码语言:javascript
复制
// 更新 - 更新product的price为2000
db.Model(&product).Update("Price", 2000)
代码语言:javascript
复制

删除

简单对象删除:

代码语言:javascript
复制
db.Delete(&product)
复杂条件的删除:
if err := db.Where(&Product{ID: 1}).Delete(Product{}).Error; err != nil {
  return err
}
代码语言:javascript
复制

事务

代码语言:javascript
复制
func CreateProducts(db *gorm.DB) err {
  tx := db.Begin()
  // 注意,一旦你在一个事务中,使用tx作为数据库句柄

  if err := tx.Create(&Product{Code: "ik01003", Price: 3000}).Error; err != nil {
    tx.Rollback()
    return err
  }

  tx.Commit()
  return nil
}

事务的处理也很简单,用 db.Begin() 声明开启事务,结束的时候调用 tx.Commit(),异常的时候调用 tx.Rollback()

最后

1. 以上就把基本的增删改查介绍完了,实际使用中还有很多高级的用法,比如关联查询,主外键设置等。大家可以看看官方的使用说明:http://gorm.book.jasperxu.com/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师精进 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Gorm的功能
  • 库安装
  • 数据库连接
  • 表定义
  • 创建表
  • 查询
  • 插入
  • 更新
  • 删除
  • 事务
  • 最后
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档