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))

}

  

原文地址:https://www.cnblogs.com/zexin88/p/14462202.html