zoukankan      html  css  js  c++  java
  • 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`
    
    
  • 相关阅读:
    AndroidStudio小技巧--依赖库
    仿iOS Segmented Control样式"
    Metaweblog在Android上使用
    正则表达式使用技巧
    flask中gunicorn的使用
    Git用法小记
    指定GPU训练模型
    python中grpc的使用示例
    如何用LaTex编辑数学公式
    keras使用多进程
  • 原文地址:https://www.cnblogs.com/you-men/p/13461202.html
Copyright © 2011-2022 走看看