æ Âé¢Âï¼Â使ç¨GORMè½»æ¾è¿ÂæÂ¥æ°æ®åºÂï¼Âå®Âç°å¢Âå æ¹æÂ¥æÂÂä½Â
å¼Âè¨Âï¼Â
大家好ï¼Âä»Â天æÂÂè¦ÂÃ¥ÂÂ大家åÂÂ享ä¸Â个Goè¯Âè¨Âä¸ÂçÂÂç¥Âå¥Âå·¥åÂ
·âÂÂâÂÂGORMï¼Âå®Âå¯以帮å©æÂÂ们轻æ¾å°è¿ÂæÂ¥æ°æ®åºÂï¼Â并å®Âç°常è§ÂçÂÂå¢Âå æ¹æÂ¥æÂÂä½ÂãÂÂä½Â为Goè¯Âè¨ÂçÂÂORMåºÂï¼ÂGORMç®ÂÃ¥ÂÂäºÂä¸Âæ°æ®åºÂçÂÂ交äºÂï¼Â让æÂÂ们ä¸Â注äºÂä¸Âå¡é»è¾Âå¼ÂÃ¥ÂÂãÂÂæÂ¥ä¸ÂæÂ¥ï¼ÂæÂÂå°ÂÃ¥ÂÂ大家å±Â示å¦Âä½Â使ç¨GORMï¼Âä¸ÂæÂ¥æÂ¥å®Âç°å¢Âå æ¹æÂ¥æÂÂä½ÂãÂÂÃ¥ÂÂå¤Â好äºÂÃ¥ÂÂï¼Â让æÂÂ们å¼Âå§Âå§ï¼Â
é¦ÂÃ¥Â
Âï¼ÂGORMæ¯ä»Âä¹Âå¢ï¼Â
GORMæ¯Goè¯Âè¨Âä¸Âä¸Â个ä¼Âç§ÂçÂÂORMï¼Â对象åÂ
³ç³»æ å°Âï¼ÂåºÂï¼Âå®ÂçÂÂÃ¥Â
¨ç§°æ¯”Go Object Relational Mapping”ãÂÂå¬起æÂ¥æÂÂç¹é«Â大ä¸Âï¼ÂÃ¥Â
¶å®Âå°±æ¯ä¸Âç§Âå·¥åÂ
·ï¼Âå¯以让æÂÂ们æ´轻æ¾å°å¨Goè¯Âè¨Âä¸ÂæÂÂä½Âæ°æ®åºÂãÂÂ
Ã¥ÂÂ设你æ£å¨å¼ÂÃ¥ÂÂä¸Â个WebåºÂç¨ï¼ÂéÂÂè¦Âä¸Âæ°æ®åºÂè¿Âè¡Â交äºÂï¼Âè¿Âæ¶åÂÂGORM就派ä¸Âç¨åºäºÂãÂÂå®ÂæÂÂä¾ÂäºÂç®ÂÃ¥ÂÂèÂÂ强大çÂÂæÂ¥å£ï¼Â帮å©你轻æ¾å°è¿Âè¡Âæ°æ®çÂÂå¢Âå æ¹æÂ¥æÂÂä½Âï¼ÂèÂÂä¸Â忠亲èªç¼ÂÃ¥ÂÂÃ¥ÂÂé¿çÂÂSQLè¯Âå¥ãÂÂ
使ç¨GORMï¼Âä½ å¯以å®Âä¹ÂGoè¯Âè¨ÂçÂÂç»ÂæÂÂä½Âï¼ÂStructï¼Âæ¥表示æ°æ®åºÂä¸ÂçÂÂ表ï¼Âå®Â们ä¹Âé´çÂÂæ å°Â堳系就ç±GORMèªå¨å¤ÂçÂÂãÂÂä½ åªéÂÂç®ÂÃ¥ÂÂå°使ç¨GORMæÂÂä¾ÂçÂÂAPIï¼Âå°±è½å®ÂæÂÂ诸å¦ÂÃ¥ÂÂ建æ°æ°æ®ãÂÂä¿®æ¹æ°æ®ãÂÂæ¥询æ°æ®çÂÂæÂÂä½ÂãÂÂ
æ¤å¤Âï¼ÂGORMè¿ÂæÂÂä¾ÂäºÂ丰å¯ÂçÂÂæ¥询åÂÂè½ï¼Âä½ å¯以éÂÂè¿Âé¾å¼Âè°Âç¨çÂÂæ¹å¼Âå®Âä¹Âæ¥询æ¡件ï¼Âæ§è¡Âå¤ÂæÂÂçÂÂæ¥询æÂÂä½ÂãÂÂè¿Âå¯以è¿Âè¡Âå ³èÂÂæ¥询ï¼Âå¿«éÂÂè·åÂÂç¸堳èÂÂçÂÂæ°æ®ãÂÂ
æÂȍÂÂæ¥说ï¼ÂGORMçÂÂåºç°让æÂÂ们çÂÂæ°æ®åºÂæÂÂä½ÂÃ¥ÂÂå¾Âæ´å æÂÂå¿«ãÂÂé«ÂæÂÂï¼ÂçÂÂå»äºÂå¾Âå¤ÂéÂÂå¤Âå³å¨ãÂÂå®Âç®ÂÃ¥ÂÂäºÂå¼ÂÃ¥ÂÂè¿Âç¨Âï¼Â使å¾ÂæÂÂ们è½å¤Âæ´ä¸Â注äºÂä¸Âå¡é»è¾ÂçÂÂå®Âç°ï¼ÂèÂÂä¸Â忠纠ç»ÂäºÂæ°æ®åºÂç¸堳çÂÂçÂÂç¢Âç»ÂèÂÂãÂÂ
æÂÂ以ï¼Âå¦ÂæÂÂä½ æ¯个åÂÂ欢Goè¯Âè¨ÂçÂÂå¼ÂÃ¥ÂÂè ï¼Âæ³è¦Âå¨项ç®ä¸Â使ç¨æ°æ®åºÂï¼Âé£ä¹ÂGORMå°ÂæÂÂ为你çÂÂå¾ÂÃ¥ÂÂå©æÂÂãÂÂå®Âç®ÂÃ¥ÂÂäºÂæ°æ®åºÂæÂÂä½Âï¼Â让你çÂÂ代ç Âæ´å ä¼Âé èÂÂå¯ÂæÂÂ表ç°åÂÂãÂÂ
第ä¸ÂæÂ¥ï¼Âå®Âè£Â
GORM
é¦ÂÃ¥Â
Âï¼ÂæÂÂ们éÂÂè¦Âå¨Go项ç®ä¸Âå®Âè£Â
GORMÃ¥ÂÂ
ãÂÂæÂÂå¼Âç»Â端ï¼Âè¿Âè¡Â以ä¸Âå½令ï¼Â
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
è¿Âå°Âèªå¨ä¸Â载并å®Â裠GORMÃ¥ÂÂMySQL驱å¨ç¨ÂåºÂãÂÂ
第äºÂæÂ¥ï¼Âè¿ÂæÂ¥æ°æ®åºÂ
å¨使ç¨GORMä¹ÂÃ¥ÂÂï¼ÂæÂÂ们éÂÂè¦ÂÃ¥Â
Â建ç«Âä¸Âæ°æ®åºÂçÂÂè¿ÂæÂ¥ãÂÂå¨你çÂÂGo代ç Âä¸Â导åÂ
Â¥GORMÃ¥ÂÂMySQL驱å¨ç¨ÂåºÂÃ¥ÂÂ
ï¼Âç¶åÂÂ使ç¨gorm.Open
å½æ°åÂÂ建æ°æ®åºÂè¿ÂæÂ¥ãÂÂ
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
func main() {
dsn := "ç¨æ·åÂÂ:å¯Âç Â@tcp(localhost:3306)/æ°æ®åºÂÃ¥ÂÂ?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("è¿ÂæÂ¥æ°æ®åºÂ失败")
}
defer db.Close()
// è¿ÂæÂ¥æÂÂÃ¥ÂÂï¼ÂæÂÂ们å¯以å¼Âå§Âè¿Âè¡Âæ°æ®åºÂæÂÂä½ÂäºÂ
}
å¨ä¸Â述代ç Âä¸Âï¼Âä½ éÂÂè¦Âå°Âç¨æ·åÂÂ
ãÂÂå¯Âç Â
ãÂÂlocalhost:3306
以åÂÂæ°æ®åºÂÃ¥ÂÂ
æ¿æ¢为你èª己çÂÂæ°æ®åºÂéÂ
Âç½®ãÂÂ
第ä¸ÂæÂ¥ï¼Âå®Âä¹Â模åÂÂÃ¥ÂÂè¿Â移
å¨GORMä¸Âï¼ÂæÂÂ们使ç¨模åÂÂæÂ¥æ å°Âæ°æ®åºÂ表ãÂÂå®Âä¹Âä¸Â个ç»ÂæÂÂä½Âï¼Â并å¨ç»ÂæÂÂä½Âä¸Âæ·»å GORMçÂÂæ Âç¾ï¼Â表æÂÂÃ¥ÂÂ段ä¸Âæ°æ®åºÂ表çÂÂæ å°ÂÃ¥Â
³ç³»ãÂÂ
çÂÂå°è¿ÂéÂÂå¾Âå¤Âå°Âä¼Âä¼´å°±ä¸ÂçÂÂ解äºÂï¼Âç»ÂæÂÂä½Âæ·»å GORMçÂÂæ Âç¾表示åÂÂ段ä¸Âæ°æ®åºÂæ å°ÂÃ¥Â
³ç³»æ¯ä»Âä¹ÂæÂÂæÂÂï¼Â
Ã¥Â
¶å®Âæ¯è¿Âæ ·çÂÂï¼Â
å¨ç»ÂæÂÂä½Âä¸Âæ·»å GORMçÂÂæ Âç¾ï¼Âå¯以æÂÂå®ÂÃ¥ÂÂ段ä¸Âæ°æ®åºÂ表çÂÂæ å°ÂÃ¥Â
³ç³»ï¼Âä¾Âå¦Â表åÂÂãÂÂÃ¥ÂÂ段åÂÂãÂÂæ°æ®类åÂÂçÂÂãÂÂä¸Âé¢æ¯ä¸Â个示ä¾Âï¼Â
import “gorm.io/gorm”
type User struct {
gorm.Model // GORMæÂÂä¾ÂçÂÂÃ¥ÂÂ
åµÂç»ÂæÂÂä½Âï¼ÂÃ¥ÂÂ
å«äºÂä¸ÂäºÂéÂÂç¨çÂÂÃ¥ÂÂ段ï¼Âå¦ÂIDãÂÂCreatedAtãÂÂUpdatedAtçÂÂï¼Â
UserName string `gorm:"column:user_name"` // æÂÂå®ÂÃ¥ÂÂ段ä¸Âæ°æ®åºÂ表çÂÂæ å°ÂÃ¥Â
³ç³»ï¼Âå°ÂUserNameÃ¥ÂÂ段æ å°Âå°user_nameÃ¥ÂÂ
Age int `gorm:"column:age"` // å°ÂAgeÃ¥ÂÂ段æ å°Âå°ageÃ¥ÂÂ
Email string `gorm:"column:email"` // å°ÂEmailÃ¥ÂÂ段æ å°Âå°emailÃ¥ÂÂ
}
// 表åÂÂé»Â认为ç»ÂæÂÂä½ÂÃ¥ÂÂ称çÂÂå¤Âæ°形å¼Âï¼Âå¯以éÂÂè¿ÂæÂÂå®Â表åÂÂæÂ¥èªå®Âä¹Â
func (User) TableName() string {
return “users”
}
å¨ä¸Âé¢çÂÂä¾ÂÃ¥ÂÂä¸Âï¼Âå®Âä¹ÂäºÂä¸Â个åÂÂ为UserçÂÂç»ÂæÂÂä½Âï¼ÂÃ¥Â
¶ä¸ÂÃ¥ÂÂ
å«äºÂä¸ÂäºÂÃ¥ÂÂ段ï¼Âå¦ÂUserNameãÂÂAgeãÂÂEmailãÂÂéÂÂè¿Âå¨åÂÂ段ä¸Âæ·»å gorm:”column:xxx”æ Âç¾ï¼Âå¯以å°ÂÃ¥ÂÂ段æ å°Âå°æ°æ®åºÂ表ä¸ÂçÂÂ对åºÂÃ¥ÂÂãÂÂå¨è¿Â个ä¾ÂÃ¥ÂÂä¸Âï¼ÂUserNameÃ¥ÂÂ段æ å°Âå°user_nameÃ¥ÂÂï¼ÂAgeÃ¥ÂÂ段æ å°Âå°ageÃ¥ÂÂï¼ÂEmailÃ¥ÂÂ段æ å°Âå°emailÃ¥ÂÂãÂÂ
Ã¥ÂÂæ¶ï¼ÂæÂÂ们è¿ÂéÂÂè¦Âè¿Âè¡Âæ°æ®åºÂè¿Â移æÂÂä½Âï¼Â以åÂÂ建对åºÂçÂÂæ°æ®åºÂ表ãÂÂ
type User struct {
ID uint
Name string
Age uint
}
func main() {
// ...
// æ§è¡Âæ°æ®åºÂè¿Â移
err = db.AutoMigrate(&User{})
if err != nil {
panic("æ°æ®åºÂè¿Â移失败")
}
// è¿Â移å®ÂæÂÂï¼ÂæÂÂ们å¯以å¼Âå§Â对User表è¿Âè¡Âå¢Âå æ¹æÂ¥æÂÂä½ÂäºÂ
}
å¨ä¸Â述代ç Âä¸Âï¼ÂæÂÂ们å®Âä¹ÂäºÂä¸Â个åÂÂ为User
çÂÂç»ÂæÂÂä½Âï¼Â并为æ¯Â个åÂÂ段添å äºÂGORMçÂÂæ Âç¾ãÂÂç¶åÂÂï¼ÂæÂÂ们使ç¨db.AutoMigrate
æ¹æ³Âæ§è¡Âè¿Â移æÂÂä½Âï¼ÂGORMä¼Âèªå¨åÂÂ建对åºÂçÂÂæ°æ®åºÂ表ãÂÂ
第åÂÂæÂ¥ï¼Âå¢Âå æ¹æÂ¥æÂÂä½Â
ç°å¨ï¼ÂæÂÂ们已ç»Âè¿ÂæÂ¥äºÂæ°æ®åºÂ并è¿Âè¡ÂäºÂæ°æ®åºÂè¿Â移ï¼Âå¯以å¼Âå§Âè¿Âè¡Âå¢Âå æ¹æÂ¥æÂÂä½ÂäºÂãÂÂ
func main() {
// ...
// æÂÂÃ¥Â
¥æ°æ®
user := User{Name: "å°ÂæÂÂ", Age: 18}
result := db.Create(&user)
if result.Error != nil {
panic("æÂÂÃ¥Â
¥æ°æ®失败")
}
// æ¥询æ°æ®
var queryUser User
db.First(&queryUser, user.ID)
// æ´æ°æ°æ®
db.Model(&queryUser).Update("Age", 20)
// å é¤æ°æ®
db.Delete(&queryUser)
// ...
// æÂÂÃ¥ÂÂå«å¿ÂäºÂéÂÂ误å¤ÂçÂÂÃ¥ÂÂæÂÂ交äºÂå¡çÂÂæÂÂä½Â
}
å¨ä¸Â述代ç Âä¸Âï¼ÂæÂÂ们éÂÂè¿Âdb.Create
æ¹æ³ÂæÂÂÃ¥Â
¥äºÂä¸Âæ¡æ°çÂÂæ°æ®ï¼Â使ç¨db.First
æ¹æ³Âæ¥询äºÂ该æ¡æ°æ®ï¼Â使ç¨db.Model
Ã¥ÂÂdb.Update
æ´æ°äºÂæ°æ®ï¼ÂæÂÂÃ¥ÂÂ使ç¨db.Delete
å é¤äºÂæ°æ®ãÂÂ
æÂÂé®ï¼Â大家åºÂ该é½å¦è¿ÂJavaï¼Âç¸æ¯Â对Javaä¸ÂçÂÂJDBCæÂÂä¸Âå®ÂäºÂ解ãÂÂé£ä¹ÂGoè¯Âè¨Âä¸ÂçÂÂGORMÃ¥ÂÂJavaä¸ÂçÂÂJDBCæÂÂä»Âä¹Âå¼ÂÃ¥ÂÂå¢ï¼Â
æÂÂ们é½çÂ¥éÂÂï¼ÂGORM æ¯ä¸Â个éÂÂ常强大ç Go è¯Â訠ORM åºÂï¼Âå¯以帮å©æÂÂ们轻æ¾å°è¿ÂæÂ¥æ°æ®åºÂ并è¿Âè¡ÂÃ¥ÂÂç§Âå¢Âå æ¹æÂ¥æÂÂä½ÂãÂÂ
é¦Âå Âï¼Â让æÂÂ们æÂ¥çÂÂçÂÂè¿ÂæÂ¥æ°æ®åºÂçÂÂè¿Âç¨ÂãÂÂå¨ Java ä¸Âï¼ÂæÂÂ们使ç¨ JDBC éÂÂè¦ÂæÂÂå¨å 载æ°æ®åºÂ驱å¨ãÂÂÃ¥ÂÂ建è¿ÂæÂ¥ãÂÂæ§衠SQL è¯Âå¥çÂÂæ¥骤ï¼Âç¸对æ¥说æ¯Âè¾Âç¹ÂçÂÂãÂÂèÂÂå¨ Go ä¸Â使ç¨ GORMï¼Âå®ÂæÂÂä¾ÂäºÂç®Âæ´Âç API Ã¥ÂÂè¿Âæ¥池管çÂÂï¼ÂåªéÂÂé Âç½®æ°æ®åºÂè¿Âæ¥信æ¯ï¼ÂGORM ä¼Â帮æÂÂ们èªå¨å®ÂæÂÂè¿ÂæÂ¥è¿Âç¨Âï¼Â让æÂÂ们å¯以æ´ä¸Â注äºÂä¸Âå¡é»è¾ÂçÂÂå®Âç°ãÂÂ
æÂ¥ä¸ÂæÂ¥æ¯å¢Âå æ¹æÂ¥æÂÂä½ÂãÂÂå¨ Java ç JDBC ä¸Âï¼ÂæÂÂ们éÂÂè¦ÂæÂÂå¨ç¼Âå SQL è¯Âå¥ï¼Â并éÂÂè¿ PreparedStatement æ Statement 对象æ§è¡ÂæÂÂä½Âï¼Âç¶åÂÂå¤ÂçÂÂæ¥询ç»ÂæÂÂéÂÂçÂÂçÂÂãÂÂèÂÂå¨ GORM ä¸Âï¼ÂæÂÂ们å¯以éÂÂè¿Âå®Âä¹Âç»ÂæÂÂä½ÂÃ¥ÂÂæ°æ®åºÂ表çÂÂæ å°Â堳系ï¼Âç¶åÂÂ使ç¨ GORM æÂÂä¾ÂçÂÂæ¹æ³ÂæÂ¥æ§è¡Âå¢Âå æ¹æÂ¥æÂÂä½ÂãÂÂGORM 使ç¨äºÂ强大çÂÂæ¥询æÂÂ建å¨æÂ¥å¤ÂçÂÂæ¥询æ¡件ï¼Â使å¾ÂæÂÂ们è½å¤Âæ´ç´è§Âå°ç¼ÂÃ¥ÂÂæ¥询é»è¾Âï¼ÂèÂÂä¸Âå¿ å ³å¿Âå ·ä½Âç SQL è¯Âæ³ÂãÂÂ
æ¤å¤Âï¼ÂGORM è¿ÂæÂÂä¾ÂäºÂäºÂå¡管çÂÂãÂÂå ³èÂÂæ¥询ãÂÂÃ¥ÂÂ页æ¥询çÂÂé«Â级åÂÂè½ï¼Âå¯以帮å©æÂÂ们æ´æ¹便å°å¤ÂçÂÂå¤ÂæÂÂçÂÂæ°æ®åºÂæÂÂä½ÂãÂÂèÂÂè¿ÂäºÂÃ¥ÂÂè½å¨ JDBC ä¸Âå¯è½éÂÂè¦Âæ´å¤ÂçÂÂæÂÂå¨æÂÂä½ÂÃ¥ÂÂç¼ÂÃ¥ÂÂå¤ÂæÂÂç SQL è¯Âå¥æÂ¥å®Âç°ãÂÂ
æÂȍÂÂæ¥说ï¼ÂGORM å JDBC å¨è¿ÂæÂ¥æ°æ®åºÂÃ¥ÂÂæ§è¡Âå¢Âå æ¹æÂ¥æÂÂä½ÂçÂÂæ¹å¼Âä¸ÂæÂÂçÂÂæÂÂæ¾çÂÂå·®å¼ÂãÂÂGORM æÂÂä¾ÂäºÂæ´ç®Âæ´ÂãÂÂé«Â级ç APIï¼Â让æÂÂ们è½å¤Âæ´快éÂÂå°å¼ÂÃ¥ÂÂæ°æ®åºÂç¸堳çÂÂÃ¥ÂÂè½ãÂÂè JDBC Ã¥ÂÂæ´å åºÂå±Âï¼ÂéÂÂè¦ÂæÂÂå¨ç¼Âå SQL è¯Âå¥åÂÂå¤ÂçÂÂæ°æ®åºÂè¿ÂæÂ¥ï¼Âç¸对æ¥说æ´å çµ活ï¼Âä½Âå¼ÂÃ¥ÂÂèµ·æÂ¥å¯è½ä¼Âæ´ç¹ÂçÂÂä¸ÂäºÂãÂÂ
æ»ç»Âï¼Â
éÂÂè¿Âæ¾ÂÂï¼ÂæÂÂ们äºÂ解äºÂå¦Âä½Â使ç¨GORMè¿ÂæÂ¥æ°æ®åºÂï¼Â并å®Âç°å¢Âå æ¹æÂ¥æÂÂä½ÂãÂÂGORMæÂÂä¾ÂäºÂç®Âæ´ÂæÂÂç¨çÂÂAPIï¼Â让æ°æ®åºÂæÂÂä½ÂÃ¥ÂÂå¾Âè½»æ¾æÂÂå¿«ãÂÂå½Âç¶ï¼Âè¿Âåªæ¯GORMÃ¥ÂÂè½çÂÂå°山ä¸Âè§Âï¼Âè¿ÂæÂÂ许å¤ÂÃ¥Â
¶ä»Â强大çÂÂÃ¥ÂÂè½çÂÂå¾Â
ä½ åÂȾ¢索ãÂÂå¸ÂæÂÂæ¾ÂÂ对你æÂÂæÂÂ帮å©ï¼Âç¥Âä½ å¨使ç¨GORMçÂÂæÂÂæ¯ä¹ÂæÂÂ
ä¸Âè·å¾Âæ´å¤ÂçÂÂæÂÂÃ¥ÂÂï¼Â