本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

Gin-GORM的使用

import (
	"fmt"
	"os"
	"gopkg.in/ini.v1"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
var DB *gorm.DB
var err error
func init() {
	//读取.ini里面的数据库配置

	config, iniErr := ini.Load("./conf/app.ini")
	if iniErr != nil {
		fmt.Printf("获取配置失败: %v", iniErr)
		os.Exit(1)
	}

	ip := config.Section("mysql").Key("ip").String()
	port := config.Section("mysql").Key("port").String()
	user := config.Section("mysql").Key("user").String()
	password := config.Section("mysql").Key("password").String()
	database := config.Section("mysql").Key("database").String()

	// dsn := "root:123456@tcp(192.168.0.6:3306)/gin?charset=utf8mb4&parseTime=True&loc=Local"
	dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4&parseTime=True&loc=Local", user, password, ip, port, database)
	DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		QueryFields: true, //打印sql
		//SkipDefaultTransaction: true, //禁用事务
	})
	// DB.Debug()
	if err != nil {
		fmt.Println(err)
	}
}

自定义模型控制表名

默认情况表名是名称复数吗, 如果我们的结构体为User{}, 表示这个模型默认操作users表. 如果想修改默认表名称

// 控制user表
func (User) TableName() string{
	return "user"
}

增删改查

//查
userList = []User{}
DB.Find(&userList) // 全部数据

DB.where("age > ?", 20).Find(&userList)

//增加数据
user := User{
	Username:"张三",
	Age:20,
	AddTime:1185645842
}
DB.Create(&user)

//修改1
user := User{Id:7}
DB.Find(&user)
user.Age = 18
DB.save(&user)

//修改2-修改指定列
user := User{}
DB.Model(&user).Where("id = ?",5).Update("Username","王丰")

//删除1
user := User{Id:5}
DB.Delete(&user)
//删除2
user := User{}
DB.Where("Id = ?",5).Delete(&user)

Where详情

// 自定义返回json格式
type Nav struct{
	Id int `json:"idx"`
	Title string `json:"title"`
	Url string `json:"url"`
}

navList := []Nav{}
nav := nav{}
//Id大于3的数据
DB.Where("id > ?",3).Find(&navList)

//Id大于3 AND Id小于9
DB.Where("id>3 AND id<9").Find(&navList)
DB.Where("id>? And id<?",3,9).Find(&navList)

//获取id是3,5,6的数据
DB.Where("id In ?", []int{3,5,6}).Find(&navList)

//查询文章标题包含 "有" 的文章
DB.Where("title LIKE ?", "%有%").Find(&navList)

// between AND id在3到30的数据
DB.Where("id between ? and ?",3,30).Find(&navList)

// OR 获取Id=2 或 Id=3的数据
DB.Where("id=? OR id=?",2,3).Find(&navList)
DB.OR()
-------------------------------------------------------------
// Select 拿取指定字段
DB.Select("id,title")

//Count 拿出数量
num := 0
DB.Find(&navList).Count(&num)

Order, Limit, Offset

//排序, 按照顺序正序 id倒序 输出
DB.Order("shunxv asc").Order("id desc").Find(&navList)

//Limit限制条数, 拿出前2条
DB.Order("shunxv asc").Order("id desc").Limit(2).Find(&navList)

//Offset 跳过前2条
DB.Order("shunxv asc").Order("id desc").Offset(2).Find(&navList)

使用原生sql

//删除一条数据
DB.Exec("delete from user where id=?",5)
//修改一条数据
DB.Exec("update user set username='wdf' where id=?",4)

//查询全部(1条)数据
DB.Row("select * from user").Scan(&userList)
//查询user表数据量
num :=0
DB.Row("select * from user").Scan(&num)

多表关联, 结构体关联, 一对一, 一对多

//文章分类表
type ArticleCate struct {
	Id int
	Title int
	Articles []Article `gorm:"foreignKey:CateId"`
}
// 文章表
type Article struct{
	Id int
	Title string
	CateId int //想通过这个关联到文章分类
	State int
	ArticleCxxx ArticleCate `gorm:"foreignKey:CateId"`
}
//拿数据
articleList := []Article{}
DB.Preload("ArticleCxxx").Find(&articleList)

articleCateList := []ArticleCate{}
DB.Preload("Articles").Find(&articleList)

多对多

//学生表
type Student struct{
	Id int
	Name string
	Number string

	//lesson_student是中间表名
	Lesson []Lesson `gorm:"many2many:lesson_student;"`
}
//课程表
type Lesson struct{
	Id int `json:"id"`
	Name string `json:"name"`

	//用于查找选修这门课的学生
	Student []Student `gorm:"many2many:lesson_student;"`
}
//中间表
type LessonStudent struct{
	LessonId int
	StudentId int
}

//获取学生选的课程
DB.Preload("Lesson").Find(&studentList)

//查找选修这门课的学生
DB.Preload("Student").Find(&lessonList)

// 查找选修每一门课的学生, 把id为1的学生排除掉
DB.Preload("Student","id != 1").Find(&lessonList)
# golang   gin   json   gorm  

评论