golong mysql orm_Golang 入门系列(十二)ORM框架gorm

之前在已经介绍了用的github.com/go-sql-driver/mysql 访问数据库,不太了解的可以看看之前的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html。实际上,为提高开发效率,一般都会使用一些orm框架,把数据库层屏蔽,用户看到的只有对象而无需我们手动做一些转换,这样在使用的时候就非常方便。这种操作方式基本上已经成了标准做法。golang也有很多优秀的orm框架,今天就来介绍介绍gorm。

为什么要使用orm? 为什么是gorm? gorm 跟其他框架有什么不一样?这里就不在介绍了。直接讲用法吧。

库安装

go get -u github.com/jinzhu/gorm

数据库连接

db, err = gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/irisapp?charset=utf8&parseTime=True&loc=Local")

if err != nil {

panic("连接数据库失败")

}

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

表定义

type Product struct{

IDint `gorm:"primary_key"`

Codestring `gorm:"type:varchar(20);"`

Priceint `gorm:"type:int;"`

Namestring `gorm:"type:varchar(64);"`

Mailstring `gorm:"type:varchar(256);"`

CreatedAt time.Time

}

创建表

if !db.HasTable(&Like{}) {if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Product{}).Error; err !=nil {

panic(err)

}

}

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

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

//自动迁移模式

db.AutoMigrate(&Product{})

查询

varproduct Product

db.First(&product, 1) //查询id为1的product

db.First(&product, "code = ?", "ik01001") //查询code为l1212的product

插入

//创建

db.Create(&Product{Code: "ik01001", Price: 1000})

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

更新

//更新 - 更新product的price为2000

db.Model(&product).Update("Price", 2000)

删除

简单对象删除:

db.Delete(&product)

复杂条件的删除:

if err := db.Where(&Product{ID: 1}).Delete(Product{}).Error; err !=nil {returnerr

}

事务

func CreateProducts(db *gorm.DB) err {

tx :=db.Begin()//注意,一旦你在一个事务中,使用tx作为数据库句柄

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

tx.Rollback()returnerr

}

tx.Commit()returnnil

}

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

最后

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

2. 由于空间已经满了,完整代码示例代码下载,可以关注微信公众号,下载完整代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值