Rumah pembangunan bahagian belakang Golang Cara menggunakan ORM di Golang

Cara menggunakan ORM di Golang

Apr 11, 2023 am 09:10 AM

Golang ialah bahasa tersusun yang telah digemari oleh semakin ramai pembangun kerana prestasinya yang baik. Dengan pembangunan Golang, semakin banyak senario aplikasi diliputi, termasuk pembangunan web, alat sistem, pangkalan data, dll. Antaranya, operasi pangkalan data juga telah menjadi sebahagian daripada kerja harian pembangun Golang. Dalam operasi pangkalan data, menggunakan rangka kerja ORM boleh menjimatkan masa dan meningkatkan kecekapan pembangunan. Jadi bagaimana untuk menggunakan rangka kerja ORM untuk mengendalikan pangkalan data di Golang? Mari kita ketahui.

ORM (Pemetaan Perhubungan Objek) merujuk kepada menukar data dalam pangkalan data hubungan kepada satu set data berorientasikan objek dengan menggunakan metadata yang menerangkan objek dan perhubungan, dan merangkum operasi pangkalan data dalam lapisan abstraksi, supaya kita tidak perlu mengambil berat tentang operasi SQL yang mendasari semasa proses pengaturcaraan, sekali gus memudahkan kerumitan operasi pangkalan data dan pelaksanaan program.

Pada masa ini, rangka kerja ORM yang lebih popular di Golang termasuk: GORM, XORM, QBS, dsb. Dalam artikel ini, kami akan mengambil GORM sebagai contoh untuk memperkenalkan secara terperinci cara menggunakan rangka kerja ORM di Golang.

1. Pasang GORM

Sebelum anda mula menggunakan GORM, anda perlu memasang pakej pergantungan yang sepadan. Berikut adalah pakej dependency yang perlu dipasang untuk menggunakan GORM:

go get -u github.com/jinzhu/gorm
go get -u github.com/jinzhu/gorm/dialects/mysql
Salin selepas log masuk

Antaranya, pakej dependency kedua digunakan untuk menyambung ke pangkalan data MySQL.

2. Sambung ke pangkalan data

Sebelum menggunakan GORM untuk mengendalikan pangkalan data MySQL, kita perlu mewujudkan sambungan terlebih dahulu. Dalam GORM, anda boleh menyambung ke pangkalan data MySQL melalui kod berikut:

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

func main() {
    //连接MySQL数据库
    db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("failed to connect database")
    }
    defer db.Close()
}
Salin selepas log masuk

Dalam kod di atas, kami menyambung ke pangkalan data MySQL melalui fungsi Open(), yang mengandungi nama pengguna MySQL, kata laluan , nama pangkalan data dan maklumat lain . Perlu diingat bahawa menambah "&charset=utf8&parseTime=True&loc=Local" pada penghujung parameter boleh memastikan pengekodan UTF-8 digunakan dan penghuraian jenis masa disokong.

3. Tentukan struktur

Apabila menggunakan rangka kerja ORM, anda perlu mentakrifkan struktur jadual pangkalan data untuk pemetaan dengan jadual dalam pangkalan data. Berikut ialah contoh struktur yang mentakrifkan jadual pengguna:

type User struct {
    gorm.Model
    Name string // 用户名
    Age  int    // 年龄
}
Salin selepas log masuk

Melalui kod di atas, beberapa medan jadual pengguna dipetakan kepada atribut struktur. Antaranya, "gorm.Model" ialah struktur yang disediakan oleh GORM yang melaksanakan empat medan ID, CreatedAt, UpdatedAt dan DeletedAt Empat medan biasa ini boleh ditambah dengan mudah pada setiap jadual.

4. Cipta jadual data

Selepas menentukan struktur jadual, anda juga perlu mencipta jadual data yang sepadan. Dalam GORM, anda boleh menggunakan fungsi AutoMigrate() untuk membuat jadual data secara automatik. Berikut ialah contoh kod:

func main() {
    //连接MySQL数据库
    db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("failed to connect database")
    }
    defer db.Close()

    //自动创建数据表
    db.AutoMigrate(&User{})
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan fungsi AutoMigrate() untuk mencipta jadual pengguna secara automatik Fungsi ini akan mengenal pasti secara automatik sama ada jadual itu tidak wujud , ia akan mencipta jadual baharu Jika ia wujud, maka langkaunya.

5. Data operasi

Selepas menyelesaikan kerja di atas, kami boleh mula mengendalikan data. Dalam GORM, banyak fungsi API disediakan untuk melaksanakan pelbagai operasi CRUD (Buat, Baca, Kemas Kini, Padam). Berikut ialah contoh kod untuk beberapa operasi biasa:

  1. Data baharu
//新建一条用户数据
func CreateUser(u User) error {
    return db.Create(&u).Error
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan fungsi Create() untuk melaksanakan operasi mencipta data pengguna baharu.

  1. Data pertanyaan
//查询指定ID的用户数据
func GetUserById(id uint) (User, error) {
    var user User
    return user, db.Where("id = ?", id).First(&user).Error
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan fungsi Where() dan First() untuk mendapatkan data pengguna ID yang ditentukan.

  1. Kemas kini data
//更新指定ID的用户数据
func UpdateUser(id uint, name string, age int) error {
    result := db.Model(&User{}).Where("id = ?", id).Update(map[string]interface{}{"name": name, "age": age})
    if result.Error != nil {
        return result.Error
    }

    if result.RowsAffected == 0 {
        return errors.New("未找到符合条件的记录")
    }

    return nil
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan fungsi Model(), Where() dan Update() untuk mengemas kini data pengguna bagi ID yang ditentukan beroperasi.

  1. Padam data
//删除指定ID的用户数据
func DeleteUser(id uint) error {
    result := db.Delete(&User{}, id)
    if result.Error != nil {
        return result.Error
    }

    if result.RowsAffected == 0 {
        return errors.New("未找到符合条件的记录")
    }

    return nil
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan fungsi Delete() untuk memadamkan data pengguna ID yang ditentukan.

6. Ringkasan

Menggunakan rangka kerja ORM boleh memudahkan kerumitan operasi pangkalan data dan pelaksanaan program, menjimatkan masa pembangunan dan meningkatkan kecekapan pembangunan. Di Golang, menggunakan rangka kerja GORM boleh membantu kami mengendalikan pangkalan data MySQL dengan lebih mudah. Sudah tentu, GORM juga menyediakan banyak operasi lanjutan, yang tidak akan diterangkan di sini. Semoga artikel ini bermanfaat kepada anda.

Atas ialah kandungan terperinci Cara menggunakan ORM di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? Mar 03, 2025 pm 05:17 PM

Artikel ini menerangkan mekanisme import pakej Go: Dinamakan import (mis., Import & quot; fmt & quot;) dan import kosong (mis., Import _ & quot; fmt & quot;). Dinamakan import membuat kandungan pakej boleh diakses, sementara import kosong hanya melaksanakan t

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Mar 03, 2025 pm 05:22 PM

Artikel ini menerangkan fungsi Newflash () Beego untuk pemindahan data antara halaman dalam aplikasi web. Ia memberi tumpuan kepada menggunakan NewFlash () untuk memaparkan mesej sementara (kejayaan, kesilapan, amaran) antara pengawal, memanfaatkan mekanisme sesi. Limita

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Mar 03, 2025 pm 05:18 PM

Artikel ini memperincikan penukaran yang cekap hasil pertanyaan MySQL ke dalam kepingan struct go. Ia menekankan menggunakan kaedah imbasan pangkalan data/SQL untuk prestasi optimum, mengelakkan parsing manual. Amalan terbaik untuk pemetaan medan struct menggunakan tag db dan robus

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO? Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO? Mar 10, 2025 pm 03:20 PM

Artikel ini meneroka kekangan jenis adat Go untuk generik. Ia memperincikan bagaimana antara muka menentukan keperluan jenis minimum untuk fungsi generik, meningkatkan keselamatan jenis dan kebolehgunaan semula kod. Artikel ini juga membincangkan batasan dan amalan terbaik

Bagaimana saya menulis objek dan stub untuk ujian di GO? Bagaimana saya menulis objek dan stub untuk ujian di GO? Mar 10, 2025 pm 05:38 PM

Artikel ini menunjukkan penciptaan dan stub di GO untuk ujian unit. Ia menekankan penggunaan antara muka, menyediakan contoh pelaksanaan mengejek, dan membincangkan amalan terbaik seperti menjaga mocks fokus dan menggunakan perpustakaan penegasan. Articl

Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Mar 03, 2025 pm 05:15 PM

Artikel ini memperincikan penulisan fail yang cekap di GO, membandingkan OS.WriteFile (sesuai untuk fail kecil) dengan os.openfile dan buffered menulis (optimum untuk fail besar). Ia menekankan pengendalian ralat yang teguh, menggunakan penangguhan, dan memeriksa kesilapan tertentu.

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya? Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya? Mar 10, 2025 pm 05:36 PM

Artikel ini meneroka menggunakan alat pengesanan untuk menganalisis aliran pelaksanaan aplikasi GO. Ia membincangkan teknik instrumentasi manual dan automatik, membandingkan alat seperti Jaeger, Zipkin, dan OpenTelemetry, dan menonjolkan visualisasi data yang berkesan

See all articles