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.ModelName 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 typefunc (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: "[email protected]", Role: "admin", MemberNumber: "123456"}db.Create(&user)
查var user Userdb.First(&user, 1) // 找ID為1的用戶db.First(&user, "name = ?", "Test User") // 找名字為Test User的用戶
改
db.Model(&user).Update("Email", "[email protected]")
刪
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 mainimport ("fmt"_ "github.com/go-sql-driver/mysql""xorm.io/xorm")type User struct {Id int `xorm:"pk autoincr"`Name stringEmail stringRole stringMemberNumber 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: "[email protected]", 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}}






