GORM | 青训营笔记

72 阅读2分钟

GORM

GORM是 go orm 实现之一。

GORM 的简单使用

GORM 的连接 var db *gorm.DB

func InitGormDB() (err error) {
dB, err := gorm.Open(mysql.New(mysql.Config{
DSN: fmt.Sprintf("%s:%s\@tcp(%s:%d)/%s?charset=utf8mb4\&parseTime=True\&loc=Local",
global.Settings.GormInfo.Name, global.Settings.GormInfo.Password, global.Settings.GormInfo.Host, global.Settings.GormInfo.Port, global.Settings.GormInfo.DBName), // DSN data source name
DefaultStringSize:        171,
DisableDatetimePrecision: true,
DontSupportRenameIndex:   true,
}), \&gorm.Config{
SkipDefaultTransaction:                   false,
DisableForeignKeyConstraintWhenMigrating: true,
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
if err != nil {
fmt.Printf("连接失败:%v\n", err)
}
db = dB
return err
}

数据的增加(插入)

我们直接以学生为例,学生在注册好之后需要将数据放入数据库中,所以我们在 data access object 层中(也可以叫其他层)中进行 GORM 的插入操作。

func InsertStu(user model.Student) error {
deres := db.Select("Name", "Password", "MajorNum").Create(\&model.Student{Name: user.Name, Password: user.Password, MajorNum: user.MajorNum})
err := deres.Error
if err != nil {
fmt.Printf("insert failed, err:%v\n", err)
return err
}
return err
}

值得一提的是 model.Student 为学生的相关模型,模型的建立依照上面的数据库建立规范实现,但是 GORM 本身会有非常多的配置,所以你在编写模型层的时候要注意 gorm 标签的使用。

一个例子

type Student2TInfo struct {
Id       int
Name     string
MajorNum int `gorm:"column:MajorNum"` //自定义列名
}

//自定义表名
func (Student2TInfo) TableName() string {
return "student"

回到正题,我们在 main 函数中插入数据并调用 InsertStu 后,数据库中就会产生这一条数据。

数据的删除

删除非常的简单也没什么需要细说的地方。

下面的例子是删除老师的课程。

func DeleteTCourse(id int) error { var Course []model.TCourse dbRes := db.Where("Id = ?", id).Delete(&Course) err := dbRes.Error if err != nil { fmt.Printf("delete failed, err:%v\n", err) return err } return err }

其中 model.TCourse 可以参考上面数据库的设计。

数据的更改

下面的例子是更改学生的密码

func UpdateStuPassword(id int, newPassword string) error { deRes := db.Model(&model.Student{}).Where("Id = ?", id).Update("Password", newPassword) err := deRes.Error if err != nil { fmt.Printf("update failed, err:%v\n", err) return err } return err

数据的查询

下面的例子是通过学生的 ID 查询密保的问题。

func SelectQuestionByStuId(id int) string { user := model.Student{} db.Model(&model.Student{}).Select("question").Where("Id = ?", id).Find(&user) return user.Question