gorm实践操纵数据库的CRUD|青训营笔记

54 阅读2分钟

课程总结

在gorm/RPC/gin中 gorm是三件套中负责连接数据库的有用框架,但前提是关系型数据库才能做映射,以下根据实例来学习基本操作和方法函数

控制数据库

使用gorm连接数据库需要先创建一个数据库实例以MySQL为例子,以下介绍create,delete,modify,update操作

以下User的表单作为通例

设计表单

gorm:"primaryKey"表示该字段为主键,

gorm:"unique"表示该字段的值唯一,

gorm:"default:0"表示该字段的默认值为0,

gorm:"autoCreateTime"表示自动创建

gorm:"autoUpdateTime"表示更新时间戳

连接数据库

 type User struct {
  	gorm.Model
  	Username string `gorm:"unique"`
  	Password string
  	Profile  UserProfile `gorm:"foreignKey:UserID"`
}

func main() {
User := os.Getenv("MYSQL_USER")
  Pass := os.Getenv("MYSQL_PASSWORD")
  Host := os.Getenv("MYSQL_HOST")
  Port := os.Getenv("MYSQL_PORT")
  
  dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/mysql?charset=utf8mb4&parseTime=True&loc=Local", User, Pass, Host, Port)
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

这里使用环境变量获取本机端口等等,1024运行示意如图,

此处也可以用如下方式获取参数

inputUser.Username = c.Query("username")
inputUser.Password = c.Query("password")

添加数据

也就是生成表单操作,我们使用Gorm自动生成的AutoMigrate方法,具体示例如下。 需要注意的是,表单操作完毕后采用defer stmt.Close()延迟关闭数据库链接,保证资源不泄露

AutoMigrate内填写需要自动迁移的结构体实例


db.AutoMigrate(&models.User{})


表单的删除

删除结构体实例即可,此处输出删除用户名字调用delete方法

var deleteUser 
	db.Where("name = ?", newUser.Name).First(&deletedUser).Delete(&deletedUser) 



表单修改和查找

使用update和find方法,同理定义新变量modifieUser/foundUser,以便在后续的代码中使用modifiedUser变量名而不会与结构体实例重名输入对应条件操作



var modifiedUser User
	db.Where("name = ?", "张三").First(&modifiedUser).Updates(User{Age: 20})


var foundUser User 
	db.Where("name = ?", "张三").First(&foundUser).Error // 根据条件查找名为“张三”的用户,并将其赋值给foundUser变量,然后输出查询结果
	fmt.Println(foundUser) // 输出查询结果:{1 uint32 Name:"张三" Age:18}

这里复习下命令操纵数据库:

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);


SELECT column1, column2, ...
FROM table_name
WHERE condition;

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;



DELETE FROM table_name
WHERE condition;

show tables

use <database>

select * from <database>

describe <datables>

参考文献