ORM,全称 Object-Relational MApping,即对象-关系映射,是一种程序设计技术,用于实现面向对象编程语言里对象的表现形式与关系数据库中数据的存储之间的转换。
在实际工作中,我们使用程序操作对象,然后通过对象与数据库之间的映射关系,可以使得我们不再操作 SQL,而是操作程序中的对象,将数据库中的数据映射为对象,这样可以大大提高开发效率,使开发者能够更专注于业务逻辑的实现。
具体来说,比如我们有一张 “用户” 表在 SQL 数据库中,我们可以定义一个 "User" 的对象在我们的代码中,然后我们可以通过操作这个 "User" 对象来实现对 "用户" 表的操作。比如我们创建一个 "User" 对象并保存,实际上是在 "用户" 表中插入一条数据,我们删除一个 "User" 对象,实际上是删除 "用户" 表中的某条数据。
ORM框架就是封装了这种映射关系,提供了对数据库增删查改等操作的接口,让开发者更方便地操作数据库。例如,JAVA的Hibernate,Python/ target=_blank class=infotextkey>Python的SQLAlchemy,Go语言的GORM。
一、GORM
Github:https://github.com/go-gorm
GORM 是一个 Go 语言写的 ORM 库,通过使用它可以简洁地完成对数据库的操作。它支持关联(包括一对一,一对多和多对多)、钩子(在创建、更新、查询、删除之前或之后运行特定的代码)、预加载(即先加载相关的数据,再执行指定操作)、事务处理,以及自动迁移(只是自动创建表,修改字段,不会删除数据且不支持重命名)等功能。
首先,你需要安装 GORM。这可以通过运行以下命令完成:
go get -u github.com/jinzhu/gorm
然后,你可以开始使用 GORM,如下就是一个简单的使用例子:
很好,假设我们已经拥有一个名为 user 的表,我们可以这样操作:
首先,定义 User 结构体:
type User struct {
gorm.Model
Name string `gorm:"type:varchar(255)"`
EmAIl string `gorm:"type:varchar(100);"`
Role string `gorm:"type:varchar(255)"`
MemberNumber string `gorm:"type:varchar(50)"`
}
// TableName sets the insert table name for this struct type
func (u *User) TableName() string {
return "users"
}
在这个例子中,User 结构体就会映射到 "users" 表。你可以根据需要更改 TableName 函数返回的字符串,来改变 User 结构体对应的数据库表。
注意,如果不提供 TableName 方法,GORM 默认会将结构体名(首字母小写)加上一个 's'作为表名。比如 User 结构体默认对应的表名是 "users" 。
代码中连接数据库
db, err := gorm.Open("MySQL", "root:root@/test?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic("failed to connect to database")
}
defer db.Close()
接下来,进行表的迁移:
db.AutoMigrate(&User{})
增
user := User{Name: "Test User", Email: "testuser@email.com", Role: "admin", MemberNumber: "123456"}
db.Create(&user)
查var user User
db.First(&user, 1) // 找ID为1的用户
db.First(&user, "name = ?", "Test User") // 找名字为Test User的用户
改
db.Model(&user).Update("Email", "newemail@email.com")
删
db.Delete(&user)
二、XORM
github:https://github.com/go-xorm/xorm
XORM 是一个简单且强大的 Go 语言 ORM 库,支持 MySQL, PostgreSQL, SQLite3, SqlServer, Oracle 的数据库操作。包含了基本的数据操作(CRUD)、事务处理、缓存及会话等功能。
首先,你需要安装 XORM。这可以通过运行以下命令完成:
go get xorm.io/xorm
然后,你可以开始使用 XORM,下面是一个简单的使用例子:
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"xorm.io/xorm"
)
type User struct {
Id int `xorm:"pk autoincr"`
Name string
Email string
Role string
MemberNumber string
}
func main() {
engine, err := xorm.NewEngine("mysql", "root:root@/test?charset=utf8")
if err != nil {
fmt.Println("Database connection failed: ", err)
return
}
// 同步结构体到数据库中
err = engine.Sync2(new(User))
if err != nil {
fmt.Println("Database sync failed: ", err)
return
}
// 插入
u := User{Name: "Test", Email: "test@abc.com", Role: "admin", MemberNumber: "123456"}
_, err = engine.Insert(&u)
if err != nil {
fmt.Println("Insert failed: ", err)
return
}
// 查询
users := make([]User, 0)
err = engine.Find(&users)
if err != nil {
fmt.Println("Find failed: ", err)
return
}
fmt.Println("Users: ", users)
_, err = engine.ID(u.Id).Delete(&u)
if err != nil{
fmt.Println("Delete failed: ", err)
return
}
}