golang学习笔记(4)-gorm简单的建表(迁移)与记录的增删查改

gorm简单的建表(迁移)与记录的增删查改

本文只展示简单的建表(迁移)与记录的增删查改功能,各功能的高级配置与方法后续单独学习记录。

目录

  • gorm简单的建表(迁移)与记录的增删查改
    • 连接数据库
    • 创建表
    • 创建记录
    • 记录查询
    • 修改记录
    • 删除记录

连接数据库

利用gorm连接上mysql,编写如下OpenDB()函数

func OpenDB() {
	dsn := "root:adss123@tcp(127.0.0.1:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"
	res, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	db = res
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("成功:%v\n", db)
}

创建表

创建模型

type TestTb2 struct {
	Username string
	Password string
	gorm.Model
}

根据驼峰命名法命名模型,其中嵌套的Model中已经定义了主键ID且为自增长。

type Model struct {
  ID        uint           `gorm:"primaryKey"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt gorm.DeletedAt `gorm:"index"`
}

创建表
利用gorm中的 db.AutoMigrate() 迁移方法创建表

func CreateTable(Any any) {
	OpenDB()\\连接数据库
	err := db.AutoMigrate(Any)\\Any是模型
	if err != nil {
		fmt.Printf("创建表失败:err%v\n", err)
	} else {
		fmt.Printf("创建表成功:%v\n", Any)
	}
}

实际使用只需要调用CreateTable()方法即可,当中参数Any一定是模型的指针。
例如:

func main() {
	user := &TestTb2{}
	CreateTable(user)

}

创建记录

利用 db.Create() 方法实现一条记录的创建

func InsertInfo(Any any) {
	OpenDB()
	create := db.Create(Any)
	if create.Error != nil {
		fmt.Printf("插入失败:err%v\n", create.Error)
	} else {
		fmt.Printf("插入成功:%v\n", Any)
	}

}

记录查询

记录查询牵扯了很多关联,条件。本章暂时只记录了两个简单的查询方法,其余功能在查询学习中单独记录。


利用db.Frist()查找第一个符合条件的记录

db.First(&product, 1) // 根据整型主键查找
db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录

利用此方法编写的查询函数如下

func QueryByPrimarykey(Any any, Id int) {
	OpenDB()
	first := db.First(Any, Id)
	if first.Error != nil {
		fmt.Printf("查找失败:err%v\n", first.Error)
	} else {
		fmt.Printf("查找成功:结果为%v\n", Any)
	}
}
func QueryByName(Any any, name string) {
	OpenDB()
	first := db.First(Any, "username=?", name)
	if first.Error != nil {
		fmt.Printf("查找失败:err%v\n", first.Error)
	} else {
		fmt.Printf("查找成功:结果为%v\n", Any)
	}
}

当中 db.First() 可以替换 db.Last() (查询最后一条符合条件的记录),db.Find() (查询全部符合条件的记录)等等。

修改记录

暂时通过查询记录,与db.Save()方法联合实现修改记录的简单方法,更多Update方法后续在修改学习中再着重记录

func UpdateInfo(Any *TestTb2, Id int, Username string) {
   OpenDB()
   first := db.First(Any, Id)
   if first.Error != nil {
   	fmt.Printf("查找失败:err%v\n", first.Error)
   } else {
   	Any.Username = Username
   	save := db.Save(Any)
   	if save.Error != nil {
   		fmt.Printf("修改失败:err%v\n", save.Error)
   	} else {
   		fmt.Printf("修改成功:修改值为%v\n", Any)
   	}
   }
}

删除记录

删除也只暂时通过查询记录与db.Delete()方法联合实现的删除简单功能

func DeleteInfo(Any any, Id int) {
	OpenDB()
	first := db.First(Any, Id)
	if first.Error != nil {
		fmt.Printf("查找失败:err%v\n", first.Error)
	} else {
		del := db.Delete(Any)
		if del.Error != nil {
			fmt.Printf("删除失败:err%v\n", del.Error)
		} else {
			fmt.Printf("删除成功:删除了%v条\n", del.RowsAffected)
		}
	}
}

在模型含有Model结构体时,删除操作执行的是 软删除 ,会在删除记录上增加时间,但不会真的删除该记录,后续查找时,因为删除记录不为null,被删除的记录不会被查询出来。


以上为利用gorm对mysql的建表与记录的增删查改的功能的简易实现方法,各功能的细节将在后续学习中,具体记录。

你可能感兴趣的:(golang,学习,数据库)