前言
在日常开发中,免不了要和数据库打交道,那么在go如何orm的方式进行操作数据库呢?这次我们来试试吧!
连接
首先我们需要引入gorm:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
然后编写连接数据库的方法:
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func ConnectDB(host, name, username, password string, port int) (db *gorm.DB, err error) {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4", username, password, host, port, name)
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
return
}
迁移
gorm带有迁移功能,具体参见: 迁移 | GORM ,在这里我们需要先定义我们的数据模型(具体规则可参见 模型定义 | GORM):
type Student struct {
Id int `gorm:"primaryKey;autoIncrement"`
Name string `gorm:"type:varchar(10);not null"`
Age int `gorm:"type:int(3);not null"`
Address string `gorm:"type:varchar(50);not null"`
}
然后进行迁移执行:
func main() {
db, err := ConnectDB("127.0.0.1", "juejin", "root", "root", 3306)
if err != nil {
panic(err)
}
err = db.AutoMigrate(&Student{})
if err != nil {
panic(err)
}
}
基本操作
插入数据
func InsertData(db *gorm.DB) {
loop := 10
students := make([]Student, 0, loop)
for i := 1; i <= loop; i++ {
students = append(students, Student{
Name: fmt.Sprintf("学生%d", i),
Age: i * 2,
Address: fmt.Sprintf("xxx省xxx市%d号", i),
})
}
err := db.Create(students).Error
if err != nil {
panic(err)
}
}
查询数据
func FindStudentById(db *gorm.DB, id int) (res Student) {
err := db.Model(&Student{}).First(&res, id).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
// gorm里如果没有找到记录,也会返回error,可参见:https://gorm.io/zh_CN/docs/query.html
panic(err)
}
return
}
更新数据
func UpdateStudentNameById(db *gorm.DB, id int, newName string) (res bool) {
rows := db.Model(&Student{}).Where(&Student{Id: id}).Updates(&Student{Name: newName}).RowsAffected
if rows > 0 {
res = true
}
return
}
删除数据
func RemoveStudentById(db *gorm.DB, id int) (res bool) {
rows := db.Model(&Student{}).Delete(&Student{Id: id}).RowsAffected
if rows > 0 {
res = true
}
return
}
后记
本文只是简单的为大家介绍了gorm的入门用法,大家可以参考官方的中文文档,里面有更多详细的示例:GORM中文文档 。
最后,感谢大家的阅读,谢谢!