超好用的orm库gorm是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
九江网站建设公司创新互联,九江网站设计制作,有大型网站制作公司丰富经验。已为九江千余家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的九江做网站的公司定做!
实际上,为提高开发效率,一般都会使用一些orm框架,把数据库层屏蔽,用户看到的只有对象而无需我们手动做一些转换,这样在使用的时候就非常方便。这种操作方式基本上已经成了标准做法。golang也有很多优秀的orm框架,今天就来介绍介绍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 跟其他框架有什么不一样?这里就不在介绍了。直接讲用法吧。
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 { 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}
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{})
var product Productdb.First(&product, 1) // 查询id为1的productdb.First(&product, "code = ?", "ik01001") // 查询code为l1212的product
// 创建db.Create(&Product{Code: "ik01001", Price: 1000})
构造已给对象,直接调用 db.Create() 就可以插入一条记录。不用拼接sql语句,是不是很方便。
// 更新 - 更新product的price为2000db.Model(&product).Update("Price", 2000)
简单对象删除:
db.Delete(&product)复杂条件的删除:if err := db.Where(&Product{ID: 1}).Delete(Product{}).Error; err != nil { return err}
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()
看完上述内容,你们掌握超好用的orm库gorm是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!