当前位置: 首页 > news >正文

go-orm接口原生到框架

go-orm接口原生到框架

1. 使用 Go 原生数据库 API 连接 MySQL

示例项目结构
myapp/
├── main.go
├── models/
│   └── user.go
└── go.mod
go.mod
module myappgo 1.20require (github.com/go-sql-driver/mysql v1.6.0
)
main.go
package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)func main() {// 数据库连接字符串dsn := "user:password@tcp(127.0.0.1:3306)/mydb"// 连接数据库db, err := sql.Open("mysql", dsn)if err != nil {log.Fatal(err)}defer db.Close()// 测试数据库连接if err := db.Ping(); err != nil {log.Fatal(err)}fmt.Println("Connected to the database successfully!")// 创建表createTable := `CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) NOT NULL UNIQUE);`_, err = db.Exec(createTable)if err != nil {log.Fatal(err)}fmt.Println("Table created successfully!")// 插入数据_, err = db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", "John Doe", "john@example.com")if err != nil {log.Fatal(err)}fmt.Println("Data inserted successfully!")// 查询数据rows, err := db.Query("SELECT id, name, email FROM users")if err != nil {log.Fatal(err)}defer rows.Close()for rows.Next() {var id intvar name, email stringif err := rows.Scan(&id, &name, &email); err != nil {log.Fatal(err)}fmt.Printf("%d: %s - %s\n", id, name, email)}if err := rows.Err(); err != nil {log.Fatal(err)}
}

2.使用 SQLX 库连接 MySQL

sqlx 是一个 Go 语言的库,它在 database/sql 基础上扩展了更多功能,提供了更简洁的接口用于处理 SQL 查询和数据映射。以下是一个使用 sqlx 连接和操作 MySQL 数据库的示例。

sqlx 示例项目结构
myapp/
├── main.go
├── models/
│   └── user.go
└── go.mod
go.mod
module myappgo 1.20require (github.com/go-sql-driver/mysql v1.6.0github.com/jmoiron/sqlx v1.4.0
)
models/user.go
package models// User 定义了 User 结构体
type User struct {ID    int64  `db:"id"`Name  string `db:"name"`Email string `db:"email"`
}
main.go
package mainimport ("fmt""log"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx""myapp/models"
)func main() {// 数据库连接字符串dsn := "user:password@tcp(127.0.0.1:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"// 连接数据库db, err := sqlx.Open("mysql", dsn)if err != nil {log.Fatal("failed to connect database:", err)}defer db.Close()fmt.Println("Connected to the database successfully!")// 创建表schema := `CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) NOT NULL UNIQUE);`_, err = db.Exec(schema)if err != nil {log.Fatal("failed to create table:", err)}fmt.Println("Table created successfully!")// 插入数据user := models.User{Name: "John Doe", Email: "john@example.com"}_, err = db.NamedExec(`INSERT INTO users (name, email) VALUES (:name, :email)`, &user)if err != nil {log.Fatal("failed to insert data:", err)}fmt.Println("Data inserted successfully!")// 查询数据var users []models.Usererr = db.Select(&users, "SELECT id, name, email FROM users")if err != nil {log.Fatal("failed to query data:", err)}for _, user := range users {fmt.Printf("%d: %s - %s\n", user.ID, user.Name, user.Email)}
}

3. 使用 XORM 框架连接 MySQL

示例项目结构
myapp/
├── main.go
├── models/
│   └── user.go
└── go.mod
go.mod
module myappgo 1.20require (github.com/go-sql-driver/mysql v1.6.0xorm.io/xorm v0.7.1
)
models/user.go
package modelstype User struct {Id    int64  `xorm:"pk autoincr"`Name  string `xorm:"not null"`Email string `xorm:"unique not null"`
}
main.go
package mainimport ("fmt""log"_ "github.com/go-sql-driver/mysql""xorm.io/xorm""myapp/models"
)func main() {// 数据库连接字符串dsn := "user:password@tcp(127.0.0.1:3306)/mydb"// 连接数据库engine, err := xorm.NewEngine("mysql", dsn)if err != nil {log.Fatal(err)}defer engine.Close()// 自动同步结构if err := engine.Sync2(new(models.User)); err != nil {log.Fatal(err)}fmt.Println("Table created successfully!")// 插入数据user := &models.User{Name: "John Doe", Email: "john@example.com"}_, err = engine.Insert(user)if err != nil {log.Fatal(err)}fmt.Println("Data inserted successfully!")// 查询数据var users []models.Userif err := engine.Find(&users); err != nil {log.Fatal(err)}for _, user := range users {fmt.Printf("%d: %s - %s\n", user.Id, user.Name, user.Email)}
}

4.使用 GORM 框架连接 MySQL

以下是一个使用 GORM 框架连接和操作 MySQL 数据库的示例。GORM 是一个流行的 Go 语言 ORM 框架,可以简化与数据库的交互。

GORM 示例项目结构
myapp/
├── main.go
├── models/
│   └── user.go
└── go.mod
go.mod
module myappgo 1.20require (github.com/go-sql-driver/mysql v1.6.0gorm.io/gorm v1.24.0gorm.io/driver/mysql v1.5.0
)
models/user.go
package modelsimport ("gorm.io/gorm"
)type User struct {gorm.ModelName  string `gorm:"not null"`Email string `gorm:"unique;not null"`
}
main.go
package mainimport ("fmt""log""gorm.io/driver/mysql""gorm.io/gorm""myapp/models"
)func main() {// 数据库连接字符串dsn := "user:password@tcp(127.0.0.1:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"// 连接数据库db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {log.Fatal("failed to connect database:", err)}fmt.Println("Connected to the database successfully!")// 自动迁移if err := db.AutoMigrate(&models.User{}); err != nil {log.Fatal("failed to migrate database:", err)}fmt.Println("Table created successfully!")// 插入数据user := models.User{Name: "John Doe", Email: "john@example.com"}if err := db.Create(&user).Error; err != nil {log.Fatal("failed to insert data:", err)}fmt.Println("Data inserted successfully!")// 查询数据var users []models.Userif err := db.Find(&users).Error; err != nil {log.Fatal("failed to query data:", err)}for _, user := range users {fmt.Printf("%d: %s - %s\n", user.ID, user.Name, user.Email)}
}

http://www.mrgr.cn/news/29413.html

相关文章:

  • 传奇996_19——常用函数
  • arcgis做buffer
  • 编程初学者的第一个 Rust 系统
  • 探索Copier:Python项目模板的革命者
  • 光刻机上下游产业链(方便选股)
  • 基于物联网的智能超市快速结算系统
  • 印度2024年节日季节的数字营销趋势
  • 国产开源大语言模型优劣大盘点
  • GaussDB关键技术原理:高弹性(五)
  • 碳化硅肖特基二极管B3D50120H2高速开关与低损耗的完美结合
  • 金言问卷:国外问卷调查可以做吗?
  • 教程 | ArcGIS Pro如何自动保存数据编辑内容
  • 我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪
  • 镍镉离子电池
  • 运动耳机什么牌子质量好?五大超赞顶流机型汇总
  • 超详细!CEC2017测试函数最全公式图像介绍与调用方法 Matlab代码免费获取
  • 【LeetCode】每日一题 2024_9_18 坐上公交的最晚时间(排序,模拟)
  • 【Python】从基础到进阶(八):文件操作与上下文管理
  • YOLOv9改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
  • C++入门基础(上)
  • ??Ansible——ad-hoc
  • 活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
  • 函数题 6-9 统计个位数字【PAT】
  • 建立这一新框架以应对人才紧缺时期的敏捷内容运营
  • 论文速递 | 基于MIC-ICEEMD-RIME-DHKELM的碳排放预测模型研究
  • 解决nginx代理SSE接口的响应没有流式返回