MySQL
MySQL
| 名称 | 类型 | 适用场景 |
|---|---|---|
GORM | ORM | 以模型和 CRUD 为主的项目 |
database/sql | 标准库 | 通用关系型数据库访问与连接池管理 |
sqlx | SQL 工具库 | 手写 SQL,并简化结构体映射 |
下面的示例都使用同一个模型,并省略连接初始化和错误处理:
type User struct {
ID int64 `db:"id" gorm:"primaryKey"`
Name string `db:"name"`
}
GORM
通过模型操作数据库,不需要手写基础 CRUD SQL。
user := User{Name: "Alice"}
db.Create(&user) // 增
db.First(&user, 1) // 查
db.Model(&user).Update("name", "Bob") // 改
db.Delete(&user) // 删
database/sql
直接执行 SQL,结果需要手动 Scan 到字段中。
db.ExecContext(ctx, "INSERT INTO users (name) VALUES (?)", "Alice")
var user User
db.QueryRowContext(ctx, "SELECT id, name FROM users WHERE id = ?", 1).
Scan(&user.ID, &user.Name)
db.ExecContext(ctx, "UPDATE users SET name = ? WHERE id = ?", "Bob", 1)
db.ExecContext(ctx, "DELETE FROM users WHERE id = ?", 1)
sqlx
仍然手写 SQL,但可以直接映射结构体,并使用命名参数。
db.NamedExecContext(ctx, "INSERT INTO users (name) VALUES (:name)",
map[string]any{"name": "Alice"})
var user User
db.GetContext(ctx, &user, "SELECT id, name FROM users WHERE id = ?", 1)
db.NamedExecContext(ctx, "UPDATE users SET name = :name WHERE id = :id",
map[string]any{"id": 1, "name": "Bob"})
db.ExecContext(ctx, "DELETE FROM users WHERE id = ?", 1)