目录
一、简介
什么是 ORM ,即 Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
ORM 提供了对数据库的映射,这样我们在具体操作数据库的时候,就不⽤ sql 直接编码,能够像操作对象⼀样从数据库获取数据。
gorm 是 Golang 语言中一款性能极好的 ORM 库,对开发人员相对是比较友好的。接下来主要介绍下 gorm 库的一些基本使用。
二、数据结构
数据库操作主要包括:
- 连接数据库
- 插入数据
- 查询单条数据
- 查询多条数据
- 更新数据
- 删除数据
三、菜鸟实战
实战场景:用 Go 实现数据库的基本操作
马上安排!
1、创建 g013.go
/*
* @Author: 菜鸟实战
* @FilePath: /go110/go-013/g013.go
* @Description: Go 数据库ORM
*/
package main
import (
"fmt"
"runtime"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
// 全局参数
var db *gorm.DB
// User 用户信息
// orm会默认根据结构体创建 table
// orm采用的是 linux 命名方式 即小写加下划线,且会在名字后面加 s
// 会创建users 表
type User struct {
ID uint `gorm:"primary_key"`
Name string
Hobby string
}
// 始化数据库的函数
func initDB() (err error) {
// 构建连接的 dsn 格式是:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
// dsn := "user:password@tcp(127.0.0.1:3306)/sql_test?charset=utf8mb4&parseTime=True"
dsn := "action_db:3sfXrecjGzCiHsFy@tcp(82.157.25.77:3306)/action_db?charset=utf8mb4&parseTime=True"
db, err = gorm.Open("mysql", dsn)
if err != nil {
fmt.Println("初始化数据库失败")
return err
}
fmt.Println("连接成功")
return nil
}
// 自动迁移
// 若该表不存在则创建该表,若该表存在且结构体发生变化则更新表结构
func migrateUser() {
db.AutoMigrate(&User{})
}
// 插入数据
func createRow(name string, hobby string) {
db.Create(&User{Name: name, Hobby: hobby})
fmt.Printf("插入成功 \n")
}
// 查询单条数据记录
func queryRow(name string) {
var user User
db.First(&user, "name = ?", name)
fmt.Println("查看查询记录:", user)
}
// 更新数据
func updateRow(name string, newHobby string) {
var user User
db.First(&user, "name = ?", name)
db.Model(&user).Update("hobby", newHobby)
}
// 删除数据
func deleteRow(name string) {
var user User
db.First(&user, "name = ?", name)
// 删除记录
db.Delete(&user)
fmt.Printf("删除成功 \n")
}
// 查询多行
func queryMultiRow() {
var users []User
db.Find(&users)
fmt.Println(users)
}
func main() {
// 使用内置函数打印
println("Hello", "菜鸟实战")
// 初始化数据库
initDB()
// 初始化表
migrateUser()
// 插入数据
createRow("吴越", "音乐")
createRow("李霜", "唱歌")
createRow("夏以生", "爬山")
// 查询多行数据
queryMultiRow()
// 更新数据
updateRow("李霜", "看电影")
// 查询单行数据
queryRow("李霜")
// 删除数据
deleteRow("吴越")
// 查询多行数据
queryMultiRow()
// 当前版本
fmt.Printf("版本: %s \n", runtime.Version())
fmt.Printf("菜鸟实战,持续学习! \n")
}
2、编译和运行
# 1、生成模块依赖
go mod init g013
# 2、编译
go build g013.go
# 3、编译后的目录结构└── go-013
├── g013
├── g013.go
└── go.mod
# 4、运行
go run g013
3、运行结果
Hello 菜鸟实战
连接成功
插入成功
插入成功
插入成功
[{1 吴越 音乐} {2 李霜 唱歌} {3 夏以生 爬山}]
查看查询记录: {2 李霜 看电影}
删除成功
[{2 李霜 看电影} {3 夏以生 爬山}]
版本: go1.17.10
菜鸟实战,持续学习!
菜鸟实战,持续学习!