Go之Gorm和BeegoORM简介及配置使用

时间:2022-07-25
本文章向大家介绍Go之Gorm和BeegoORM简介及配置使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

简介

ORM

Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作

Gorm

gorm就是基于Go语言实现的ORM库。 类似于Java生态里大家听到过的Mybatis、Hibernate、SpringData等。

下载使用Gorm库

下载gorm库
go get -u github.com/jinzhu/gorm

// 这是比较原始的方式,现在有了go mod,我们可以更方便的配置,甚至不用配置。
// 写好代码,在文件下执行go build,go.mod会自动添加对于gorm的依赖包
CURD
package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	"os"
	"time"
)

const (
	dbUser     string = "test"
	dbPassword string = "ZHOUjian.22"
	dbHost     string = "121.36.43.223"
	dbPort     int    = 3306
	dbName     string = "cmdb"
)

var dsn string = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&loc=Local&parseTime=true",
	dbUser, dbPassword, dbHost, dbPort, dbName)

type User3 struct {
	// 会从gorm嵌入一些字段进来
	gorm.Model
	Name     string
	Password string
	Birthday time.Time
	Sex      bool
	Tel      string
	Addr     string
	Desc     string
}

type User4 struct {
  Id       int `gorm: "primary_key; auto_increment"`
	Name     string
	Password string
	Birthday time.Time
	Sex      bool
	Tel      string
	Addr     string
	Desc     string
}

func (*User4)TableName() string {
	return "user"
}
//type User4 struct {
//	Id         int    `gorm:"primary_key"`
//	Name       string `gorm:"type:varchar(32);unique;not null; default:''"`
//	Password   string
//	Birthday   time.Time `gorm:"type:date"`
//	Sex        bool
//	Tel        string `gorm:"column:telephone"`
//	Addr       string
//	Desciption string `gorm:"type:text"`
//}

func main() {
	db, err := gorm.Open("mysql", dsn)
	if err != nil {
		fmt.Println(err)
		os.Exit(-1)
	}

	// 创建表
	db.AutoMigrate(&User3{})
	db.AutoMigrate(&User4{})
  // 	fmt.Println(db.CreateTable(&User3{},&User4{}))
	//db.Model(&User{}).AddIndex("idx_name_addr", "name", "addr")
  
  
	db.Close()
}
判断表是否存在
	// 判断表是否存在
	fmt.Println(db.HasTable(&User3{}))
	fmt.Println(db.HasTable("user4"))
	db.Close()
删除表
	fmt.Println(db.DropTable(&User3{},&User4{}))
修改表
	db.Model(&User3{}).ModifyColumn("birthday","date")
	db.Close()
删除列
	db.Model(&User3{}).DropColumn("birthday")
添加删除索引
	db.Model(&User3{}).AddIndex("idx_name","name")
	
// 联合索引	  db.Model(&User3{}).AddIndex("idx_name_addr","name","addr")
	db.Close()

// 删除索引
	db.Model(&User3{}).RemoveIndex("idx_name_addr")

// 创建UniqueIndex索引
	db.Model(&User3{}).AddUniqueIndex("idx_name","name")

BeegoORM

配置BeegoORM
package main

import (
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	ID     int
	Name   string
	Gender bool
	Tel    string
	Height float32
}

func main() {

	// 0. 导入包
	// 1. 注册驱动
	// 2. 注册数据库
	// 3. 定义数据模型 model
	// 4. 注册数据模型
	// 5. 操作
	// 		同步表结构
	// 		数据: 增,删,改,查
	dsn := "test:youmen.18@tcp(1.1.1.1:3306)/cmdb?charset=utf8mb4&parseTime=true&loc=PRC"
	orm.RegisterDriver("mysql", orm.DRMySQL)
	orm.RegisterDataBase("default", "mysql", dsn)
	// 创建User表
  orm.RegisterModel(new(User))

	orm.RunCommand()
}
Beego_orm运行参数
// 将orm要创建的表呈现为sql
go run beego_rom.go orm sqlall
-- --------------------------------------------------
--  Table Structure for `main.User`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `user` (
    `i_d` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(255) NOT NULL DEFAULT '' ,
    `gender` bool NOT NULL DEFAULT FALSE ,
    `tel` varchar(255) NOT NULL DEFAULT '' ,
    `height` double precision NOT NULL DEFAULT 0 
) ENGINE=InnoDB;


// 同步数据库
//  -force  强制创建,先删在创建
//  -v    verbose info  创建过程将创建的表sql打印出来

go run beego_rom.go orm syncdb
table `user1` already exists, skip
add column `main.User1.Salary` for table `user1`