Gorm

GORM CRUD 数据库的增删改查


go get -u github.com/jinzhu/gorm
go get -u github.com/jinzhu/gorm/dialects/mysql

go常规查询操作

package main

import (
	"encoding/json"
	"fmt"
	"time"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

var db *gorm.DB

// Test 表结构
type Test struct {
	ID       int       `json:"id" db:"id" gorm:"id"`
	Username string    `json:"username" db:"username" gorm:"username"`
	Password string    `json:"password" db:"password" gorm:"password"`
	Datetime time.Time `json:"datetime" db:"datetime" gorm:"datetime"`
	City     string    `json:"city" db:"city" gorm:"city"`
	Country  string    `json:"country" db:"country" gorm:"country"`
	Sex      string    `json:"sex" db:"sex" gorm:"sex"`
	Age      string    `json:"age" db:"age" gorm:"age"`
}

// TableName 数据库名称规范
func (t Test) TableName() string {
	return "test"
}

// Init xx
func Init() (err error) {
	db, err = gorm.Open("mysql", "root:1qa2ws3ed@/gouse?charset=utf8&parseTime=True&loc=Local")

	if err != nil {
		fmt.Println("连接诶数据库失败")
		return
	}

	return err
}

// SelectData 查询单条语句
func SelectData() (err error) {
	var info Test

	// First根据主键查询单条语句+++++++++++++
	//_ = db.First(&info)
	////fmt.Println(info.Username, info.Password, info.Age, info.Datetime)
	//marshal, err := json.Marshal(info)
	//if err != nil {
	//	fmt.Println("反序列化失败")
	//	return
	//
	//}
	//fmt.Println(string(marshal))

	// 随机获取条数据++++++++++++++++
	//db.Take(&info)
	//TakeData, err := json.Marshal(info)
	//fmt.Println(string(TakeData))

	//// 根据主键查询最后一条记录+++++++++++++
	//db.Last(&info)
	//LastData, err := json.Marshal(info)
	//fmt.Println(string(LastData))

	//// 获取所有记录+++++++++++++++
	//var infoList []Test
	//
	//db.Find(&info)
	//FindData, err := json.Marshal(infoList)
	//fmt.Println(string(FindData))

	// First 查询主键为10000的数据(仅当主键为int时)
	db.First(&info, 10000)
	marshal, err := json.Marshal(info)
	fmt.Println(string(marshal))
	return err
}

// WhereData where语句查询
func WhereData() (err error) {
	// where 条件查询sex 为女的主键第一个
	//var info Test
	//db.Where("sex = ?", "女").First(&info)
	//marshal, err := json.Marshal(info)
	//fmt.Println(string(marshal))

	// 查询所有sex为男的用户 并统计计数
	var infoList []Test
	//db.Where("sex = ?", "男").Find(&infoList)
	//fmt.Println(len(infoList))

	db.Where("id in (?)", []int{1000, 2000}).Find(&infoList)
	marshal, err := json.Marshal(infoList)
	fmt.Println(string(marshal))

	return err
}

// main 主函数
func main() {
	_ = Init()
	//err := SelectData()

	err := WhereData()
	if err != nil {
		fmt.Println("")
		return
	}
}

	// like 查询
	db.Where("username like ?", "%abc%").Find(&infoList)
	LikeData, err := json.Marshal(infoList)
	fmt.Println(string(LikeData))
	return err    

注: ?其实就是占位符

  • go结构体转换成map

go map 查询

	db.Where(map[string]interface{}{"id": 1000}).Find(&info)
	MapData, err := json.Marshal(info)

	fmt.Println(string(MapData))

	return err

go not查询

// NotSelect  Not查询用法
func NotSelect() (err error) {
	var infoList []Test

	db.Not("id = ?", "1").First(&infoList)
	NotLikeData, err := json.Marshal(infoList)
	fmt.Println(string(NotLikeData))

	db.Not("id in (?)", []int{1, 2, 3, 4, 5}).First(&infoList)
	notinData, err := json.Marshal(infoList)
	fmt.Println(string(notinData))
	return err

}

go or 查询


// OrSelect or查询
func OrSelect() (err error) {
	var infoList []Test
	db.Where("id = ?", "1").Or("id = ?", "2").Find(&infoList)
	OrData, err := json.Marshal(infoList)
	fmt.Println(string(OrData))

	return err
}

go 内联查询 等同于where条件

// 内联条件
func NeiLian() (err error) {
	var info Test
	db.Find(&info, "id = ?", "1")
	marshal, err := json.Marshal(info)
	fmt.Println(string(marshal))
	return err
}

Go firstorcreate

获取匹配的第一条记录,否则根据给定的条件创建一个新的记录(仅支持struct or map)

// FirstOrCreate 查询条件后的第一条语句 如果为空 就创建一条记录
func FirstOrCreate() (err error) {
	var info Test
	db.Where("id = ?", "1000").FirstOrCreate(&info)
	marshal, err := json.Marshal(info)
	fmt.Println(string(marshal))
	return err
}

版权声明:本文为zjaiccn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zjaiccn/p/14830433.html