GoLang—gorm实现数据库操作
RM框架介绍
ORM框架是专业开发人员必备的数据库操作手段,有关ORM框架的介绍不再详细介绍,读者可以点击(ORM框架介绍)查看相关介绍。
在GoLang中,主流的ORM框架有gorm、xorm和gorose等,三者各有优缺点并且有相应的文档支持,便于大家学习和查阅,本文将简单介绍gorm框架的使用
gorm
本文根据gorm的官方文档,简单说明gorm的使用方式,以数据表index_label为例,表中设有字段id和name,字段id为主键。首先在CMD窗口下安装gorm框架,安装方法如下:
go get -u github.com/jinzhu/gorm
1
然后在数据表index_label实现数据的增删改查操作,详细代码及其注释如下所示。
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type Label struct {
// gorm.Model是一个基本结构体,它包括以下字段:ID,CreatedAt,UpdatedAt,DeletedAt
// 在自定义的结构体中加入gorm.Model,即为该结构体添加字段:ID,CreatedAt,UpdatedAt,DeletedAt
// gorm.Model // 参考http://gorm.io/docs/conventions.html
Id int `gorm:"PRIMARY_KEY"`
Name string `gorm:"type:varchar(10)"`
}
// 结构体Label默认的数据表名为labels
// 禁用表名的复数,如果设置为true,`User`的表名将为`user`,设置所示:db.SingularTable(true)
// 如果自定义数据表名,可自定义的TableName方法
func (Label) TableName() string{
return "index_label"
}
// 参考文档http://gorm.io/docs/models.html
func main(){
// 数据库的连接方式来自github.com/go-sql-driver/mysql
db, err := gorm.Open("mysql","root:1234@(localhost:3306)/music_db?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Println(err)
}
// defer是当前函数执行结束后的时候会被调用
defer db.Close()
// 设置连接池
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
db.AutoMigrate(&Label{})
//————————————————————————————————————————————————————————————————————————————————————
// 新建数据
lable := Label{Name: "测试数据"}
db.Create(&lable)
// NewRecord是判断当前数据是否有主键,其作用不大
//id := db.NewRecord(&lable)
//fmt.Println(id)
//————————————————————————————————————————————————————————————————————————————————————
// 查询数据
// 创建数组对象l,数组元素为结构体Label
var l []Label
// 查询数据表index_label的字段name不等于"5555"的数据,并将结果写入数组对象l
db.Where("name <> ?","5555").Find(&l)
// 输出查询结果
fmt.Println(l)
// Scan将查询结果转移到数组对象ls
var ls []Label
db.Model(&Label{}).Where("id = ?","1").Scan(&ls)
// 上述查询方式等价于db.Where("id = ?","1").Find(&ls)
fmt.Println(ls)
// 更多的数据查询方式请参考http://gorm.io/docs/query.html
//————————————————————————————————————————————————————————————————————————————————————
// 更新数据
// Update是更新某个字段的数据
db.Where("id = ?","1").Find(&l).Update("name", "更新数据")
// Updates是更新多个字段的数据
db.Model(&Label{}).Where("id = ?","1").Updates(Label{Name: "更新数据2"})
// 上述方式等价于db.Where("id = ?","1").Find(&l).Updates(Label{Name: "更新数据2"})
//————————————————————————————————————————————————————————————————————————————————————
// 删除数据
db.Where("name = ?","测试数据").Delete(Label{})
// 如果不使用Where,可以实例化结构体Label,从而删除对应的数据
// 比如删除id=8的数据:db.Delete(Label{Id: 8})
//————————————————————————————————————————————————————————————————————————————————————
// 执行原生的SQL语句
var name string
// 查询数据使用Raw方法
// 如果查询单行数据,使用Row即可,如果多行数据则使用Rows
db.Raw("select name from index_label where id=6").Row().Scan(&name)
fmt.Println(name)
// 删除、新增或更新数据使用Exec方法
db.Exec("delete from index_label where id=7")
}
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。