Rumah >pembangunan bahagian belakang >Golang >pertanyaan jadual bersama golang
Dalam pembangunan golang, kami selalunya perlu menggunakan pangkalan data untuk operasi data, dan dalam perniagaan sebenar kami sering perlu melakukan pertanyaan jadual bersama pada berbilang jadual. Artikel ini akan memperkenalkan cara menggunakan golang untuk melaksanakan pertanyaan bersama berbilang jadual.
Di golang, kami sering menggunakan alatan ORM untuk melaksanakan operasi pangkalan data. ORM (Object Relational Mapping), iaitu Object Relational Mapping, menukar jadual dalam pangkalan data hubungan ke dalam bentuk berorientasikan objek, menjadikan operasi pangkalan data lebih fleksibel dan mudah. Alat ORM golang yang biasa digunakan termasuk GORM, XORM, Beego ORM, dsb. Di sini kita mengambil menggunakan GORM sebagai contoh.
Anda boleh memasang GORM melalui arahan berikut:
go get -u github.com/jinzhu/gorm
Sebelum melaksanakan pertanyaan jadual bersama, anda perlu menentukan model data . Model data menukar jadual pangkalan data hubungan kepada struktur dalam golang untuk memudahkan operasi data kami. Sebagai contoh, kita perlu melakukan pertanyaan jadual bersama dua jadual, satu ialah pengguna jadual pengguna, dan satu lagi ialah susunan jadual pesanan dan masing-masing boleh ditakrifkan sebagai struktur berikut:
type User struct { Id int Name string } type Order struct { Id int UserId int OrderName string CreateTime time.Time }
. Antaranya, struktur Pengguna Ia merangkumi dua medan, iaitu Id dan Nama, yang sepadan dengan medan id dan nama dalam jadual pengguna Struktur Pesanan merangkumi empat medan, iaitu Id, UserId, OrderName dan CreateTime, yang sepadan dengan id; medan , user_id, order_name dan create_time.
Apabila melakukan pertanyaan jadual bersama, anda perlu mentakrifkan perkaitan antara kedua-dua jadual. GORM menyediakan empat jenis perhubungan: One-To-One, One-To-Many, Many-To-One, Many-To-Many ).
Sebagai contoh, kita perlu mempunyai perkaitan banyak dengan satu antara Pengguna dan Pesanan, iaitu, seorang pengguna boleh sepadan dengan berbilang pesanan dan satu pesanan hanya boleh sepadan dengan satu pengguna. Anda boleh menambah medan Pesanan pada struktur Pengguna untuk mewakili semua pesanan yang sepadan dengan pengguna, seperti berikut:
type User struct { Id int Name string Orders []Order `gorm:"ForeignKey:UserId"` }
Dalam struktur Pesanan, anda perlu menambah medan Pengguna untuk mewakili pengguna yang sepadan dengan pesanan . Seperti berikut:
type Order struct { Id int UserId int User User OrderName string CreateTime time.Time }
Antaranya, "ForeignKey:UserId" dalam medan Pesanan menunjukkan bahawa medan user_id dalam jadual pesanan dikaitkan dengan medan id dalam jadual pengguna dan digunakan sebagai kunci asing dalam jadual pengguna; medan Pengguna Pengguna dalam menunjukkan bahawa medan ini dikaitkan dengan medan Pesanan dalam struktur Pengguna.
Apabila melakukan pertanyaan bersama berbilang jadual melalui golang, anda boleh menggunakan kaedah Pramuat GORM. Kaedah Pramuat boleh menanyakan semua data yang berkaitan berdasarkan perhubungan perkaitan. Contohnya, jika kita perlu menanyakan semua pesanan dan memasukkan maklumat pengguna yang sepadan, kita boleh menggunakan kod berikut:
var orders []Order db.Preload("User").Find(&orders) fmt.Println(orders[0].User.Name) // 输出第一条数据的用户名
Antaranya, Pramuat("Pengguna") bermaksud menggunakan medan Pengguna untuk perkaitan semasa membuat pertanyaan, dan Cari(&pesanan) bermaksud Tanya semua pesanan dan simpannya dalam pembolehubah pesanan. pesanan[0].Nama Pengguna mewakili nama pengguna pengguna yang sepadan dengan sekeping pertama output data.
Jika kami perlu menanyakan semua pengguna dan pesanan mereka yang sepadan, kami boleh menggunakan kod berikut:
var users []User db.Preload("Orders").Find(&users) fmt.Println(users[0].Orders[0].OrderName) // 输出第一个用户的第一个订单名
Antaranya, Pramuat("Pesanan") bermaksud menggunakan medan Pesanan untuk korelasi semasa membuat pertanyaan , Find(&users ) bermaksud untuk menanyakan semua pengguna dan menyimpannya dalam pembolehubah pengguna. pengguna[0].Pesanan[0].OrderName bermaksud mengeluarkan nama pesanan pertama pengguna pertama.
Ringkasan
Menggunakan golang untuk melaksanakan pertanyaan bersama berbilang jadual, kami boleh melaksanakannya dengan mentakrif model data, mentakrifkan perhubungan dan menggunakan kaedah Pramuat GORM. Model dan hubungan data yang baik boleh memudahkan operasi dan pertanyaan data kami. Kaedah Pramuat GORM membolehkan kami melakukan pertanyaan bersama dengan mudah pada berbilang jadual, mengurangkan jumlah kod dan meningkatkan kecekapan kod.
Atas ialah kandungan terperinci pertanyaan jadual bersama golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!