今天看啥  ›  专栏  ›  Xy-Huang

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

Xy-Huang  · CSDN  ·  · 2019-11-06 12:17

ORM框架介绍

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

然后在数据表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的数据库操作,两者分别可以使用数据库驱动( redigo go-redis/redis )和( mongo-go-driver )实现,具体的操作方式与MySql的go-sql-driver/mysql大同小异,本文不再详细讲述。


虽然标准库net/http能构建Web服务,但Web很多功能应用需要我们自己开发,比如会话Session,日志记录等等。为了精简开发过程,下一节将讲述Go的web框架——Beego


原文地址:访问原文地址
快照地址: 访问文章快照