zoukankan      html  css  js  c++  java
  • go gorm mysql 操作

    连接mysql、增删改查示例

    package main
    
    import (
    	"fmt"
    	"github.com/jinzhu/gorm"
    	_"github.com/jinzhu/gorm/dialects/mysql" // 这里没有直接使用,匿名导入
    
    )
    
    type User struct {
    	//gorm.Model
    	UserId int64 `gorm:"primary_key"`
    	UserName string
    
    
    }
    
    func main()  {
    	db, err := gorm.Open("mysql","root:123456@(127.0.0.1)/czx_dev?charset=utf8mb4&parseTime=True&loc=Local")
    	if err != nil {
    		panic(err)
    	}
    	defer db.Close()
    	fmt.Println("连接成功")
    	db.AutoMigrate(&User{})
    
    /*	// 添加数据
    	user001 := &User{UserName: "stefan"}
    	user002 :=&User{
    		UserName: "jerry",
    	}
    	user003 :=&User{
    		UserName: "Tom",
    	}
    	user004 :=&User{
    		UserName: "xaioming",
    	}
    	db.Create(&user001)
    	db.Create(&user002)
    	db.Create(&user003)
    	db.Create(&user004)*/
    
    
    	// 查询数据
    	var userinfo User
    	db.Find(&userinfo)
    	fmt.Printf("信息:%#v
    ",userinfo)
    
    	// 条件查询
    	var uu User
    	db.Find(&uu,"user_name=?","Tom")
    	fmt.Printf("%#v
    ",uu)
    
    	// 更新数据
    	db.Model(&userinfo).Update("user_name","new_name")
    
    	// 删除数据
    	db.Delete(&uu)
    
    
    
    
    
    
    
    }

      

    默认表明 和字段的操作

    package main
    
    import (
    	"database/sql"
    	"fmt"
    	"github.com/jinzhu/gorm"
    	_ "github.com/jinzhu/gorm/dialects/mysql" // 这里没有直接使用,匿名导入
    	"time"
    )
    
    // https://www.liwenzhou.com/posts/Go/gorm/ 李文周博客文档
    
    type User struct {
    	//gorm.Model
    	UserId   int64 `gorm:"primary_key"`
    	UserName string
    }
    
    type Good struct {
    	// // 将 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`字段注入到`Good`模型中
    	gorm.Model //
    	GoodName   string
    }
    
    type ModelTest struct {
    	gorm.Model
    	Name         string
    	Age          sql.NullInt64
    	Birthday     *time.Time
    	Email        string  `gorm:"type:varchar(100);unique_index"`
    	Role         string  `gorm:"size:255"`
    	MemberNumber *string `gorm:"unique;not null"`
    	Num          int     `gorm:"AUTO_INCREMENT"`
    	Adress       string  `gorm:"index:addr"`
    	IgnoreMe     int     `gorm:"-"`
    }
    
    // 表名默认是结构体名称的复数  `ModelTest`,`Users`
    
    type TableTest struct {
    	gorm.Model
    	Name string
    }
    
    func (t TableTest)TableName() string {
    	return "mytables"
    
    }
    
    
    // 使用结构体的Tat 指定列名
    type Animal struct {
    	AnimalId int64 `gorm:"column:bease_id"`
    	Name string `gorm:"column:a_name"`
    	Age int64 `gorm:"column:a_age"`
    	Birthday time.Time `gorm:"column:day_of_birthday"`
    	CreatedAt time.Time `gorm:"column:column:day_of_create"`
    }
    
    type Test002 struct {
    	Aame string
    	Age int64
    }
    
    // GORM 支持更改默认表名名称规则
    
    
    
    
    
    
    func main() {
    	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1)/czx_dev?charset=utf8mb4&parseTime=True&loc=Local")
    	if err != nil {
    		panic(err)
    	}
    	defer db.Close()
    	fmt.Println("连接成功")
    	db.SingularTable(true) // 这个开关 和 默认表明是不冲突的,不管以怎么样的规则创建新的表
    	// 如果没有打开,false 的话, 创建的表明永远是自己规则表名的复数 形式。
    
    
    
    	// gorm 支持自己修改默认表名的规则。
    	// db.SingularTable(true) 就是 prefix_ + 结构体名称
    	// db.SingularTable(fause) 就是 prefix_ + 结构体名称复数 形式
    
    	gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
    		return "prefix_" + defaultTableName
    
    	}
    	db.AutoMigrate(&User{},ModelTest{},&TableTest{},&Animal{},&Test002{})
    
    
    
    
    
    	/*
    		使用 Test002 接头体创建 名为 `test003` 的 表
    		 测试怎么没反应呢?
    
    		也可以通过Table()指定表名: 好像没反应
    
    	*/
    	db.Table("test003").Create(&Test002{})  // 这个创建数据表好像没有创建,我觉得这个应该是往某张表添加数据的操作 添加具体的数据的。不是创建表的。
    
    
    	db.Create("test002").Create(&Test002{"stefan",11})
    
    	db.Table("animal").Create(&Animal{111,"dog",25,time.Now(),time.Now()})
    
    		// 添加数据
    		user001 := &User{UserName: "stefan"}
    		user002 :=&User{
    			UserName: "jerry",
    		}
    		user003 :=&User{
    			UserName: "Tom",
    		}
    		user004 :=&User{
    			UserName: "xaioming",
    		}
    		db.Create(&user001)
    		db.Create(&user002)
    		db.Create(&user003)
    		db.Create(&user004)
    
    	// 查询数据
    	var userinfo User
    	db.Find(&userinfo)
    	fmt.Printf("信息:%#v
    ", userinfo)
    
    	// 条件查询
    	var uu User
    	db.Find(&uu, "user_name=?", "Tom")
    	fmt.Printf("%#v
    ", uu)
    
    	// 更新数据
    	db.Model(&userinfo).Update("user_name", "new_name")
    
    	// 删除数据
    	db.Delete(&uu)
    
    	var infos []Test002
    
    
    	db.Table("test002").Find(&infos)
    	fmt.Printf("res: %#v
    ",infos,"-------------
    ",len(infos))
    
    }
    

      

  • 相关阅读:
    js判断是移动端还是PC端
    如何删除mysql注释
    Javascript库的产生和解读
    zeptojs库解读3之ajax模块
    zeptojs库解读2之事件模块
    zeptojs库解读1之整体框架
    发起图片请求的几种可能性(webkit内核)
    让zend studio 支持 redis函数自动提示
    4种常见的MySQL日志类型
    redis 安装
  • 原文地址:https://www.cnblogs.com/zexin88/p/14462202.html
Copyright © 2011-2022 走看看