GoLang—使用net/http构建Web服务(gorm实现数据存储)(下)

17 篇文章 0 订阅
14 篇文章 2 订阅

ORM框架介绍

ORM框架是专业开发人员必备的数据库操作手段,有关ORM框架的介绍不再详细介绍,读者可以点击(ORM框架介绍)查看相关介绍。
在GoLang中,主流的ORM框架有gormxormgorose等,三者各有优缺点并且有相应的文档支持,便于大家学习和查阅,本文将简单介绍gorm框架的使用

gorm

本文根据gorm的官方文档,简单说明gorm的使用方式,以数据表index_label为例,表中设有字段id和name,字段id为主键。首先在CMD窗口下安装gorm框架,安装方法如下:

go get -u github.com/jinzhu/gorm

然后在数据表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")
}

综合上述,本博文讲述了如何使用gorm框架实现数据库MySQL数据库操作。除此之外,还有非关系数据redis和MongoDB的数据库操作,两者分别可以使用数据库驱动(redigogo-redis/redis)和(mongo-go-driver)实现,具体的操作方式与MySql的go-sql-driver/mysql大同小异,本文不再详细讲述。


虽然标准库net/http能构建Web服务,但Web很多功能应用需要我们自己开发,比如会话Session,日志记录等等。为了精简开发过程,下一节将讲述Go的web框架——Beego
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xy-Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值