Go dünyasındaki orm'un php'deki orm kadar kolay kullanılmadığını keşfettiniz mi bilmiyorum. Bu yazıda, bu sorunu ciddi bir şekilde ele alıyoruz ve daha sonra bir çözüm öneriyorum.

php 'de Veritabanı

Örneğin, PHP'de ilgili bir sorgu uygulamak istiyorsanız, yalnızca ok işlevini sürekli olarak kullanmanız gerekir.
$users = DB::table('users')->whereIn('id', [1, 2, 3])->orderBy('name', 'desc')->get();
Yukarıdaki kodun bir tablo üzerinde sorgu işlemini gerçekleştirmesi çok basittir ve sorgu sonuçları ada göre ters sırada sıralanmıştır ki bu çok basit bir işlemdir.
Ama aynı işi yapmak go'da daha zahmetli

Go'da Veritabanı Sorunu

Go'nun yerel sorgusunu kullanıyorsanız, aşağıdaki kodu yazmanız gerekir.
rows, err := db.Query("select * from users where id in (?,?,?) order by name desc", 1, 2, 3)
Temel olarak, eksiksiz bir sql deyimini elle yazmanız gerekir, tümü manuel olarak
ne! Sql deyimlerini elle yazamayacağımızdan değil, önemli olan, bunları elle yazmaya gerek olmamasıdır, değil mi?
Tam el yazısı iki sorunu beraberinde getirebilir
  1. Bazı öğrenciler sql sözdizimine aşina olmayabilir ve dilbilgisi hatalarına eğilimlidir.
  2. Bazı öğrenciler SQL yazma konusunda ciddi olmayabilirler ve özellikle çok sayıda koşul ve yer tutucu olduğunda yazım hatalarına eğilimlidirler.
Gorm gibi bir orm aracı kullanırsanız, şöyle yazılabilir.
db.Where("id in (?)", []int{1,2,3}).Order("create_time desc").Find(&users)
Açıkçası orjinalinden daha iyi.el ile select gibi anahtar kelimeler yazmanıza gerek yok ama temel problem hala çözülmemiş ve id (?) ve benzeri el ile yazmanız gerekiyor. Daha önce tamamen manuel olmakla eşdeğerdi ve şimdi yarı manuel ve yarı otomatik.
Benim örneğimde tek bir koşul var, gerçek işlerde çok sayıda sorgu koşulu olacak ve sayı kesin değil, bu yarı otomatik yöntem çok iyi değil.
çözüm

Madem problem var, çözüm de var. Açıkçası, ideal çözüm php ile tutarlı kalmaktır. Peki bunu yapabilir misin?
Cevap şüphesiz, evet.
Burada, bu tür işleri kolayca tamamlayabilen yeni bir veritabanı işlem kitaplığı önerilir.
https://github.com/tangpanqing/aorm Tavsiye edilir.

Bu Kitaplık bazı önemli özelliklere sahiptir
  • Basit kod, yüksek performans
  • MySQL, MsSQL, Postgres, Sqlite3 veritabanını destekler
  • Destek boş değer sorgusu
  • Otomatik geçişi destekleyin
  • SQL eklemeyi destekleyin
Spesifik kullanıma bakalım, sadece şimdi operasyon
aorm.Use(db).Table("users").WhereIn("id", []int{1,2,3}).OrderBy("name","desc").GetMany(&users)
php yazma yöntemi ile karşılaştırıldığında
$users = DB::table('users')->whereIn('id', [1, 2, 3])->orderBy('name', 'desc')->get();
Tamamen aynılar diyemezsiniz ama tamamen aynılar değil mi?
Sorgu koşulları belirsizse ne yapılacağına bir göz atalım mı?
Bu liste sorgularında sıkça karşılaşılan bir sorundur.Farklı verilere göre farklı koşulları arttırmamız veya azaltmamız ve ardından farklı sonuçları sorgulamak için farklı SQL oluşturmamız gerekir.
   var listByWhere []Person        

var where1 []builder.WhereItem    
where1 = append(where1, builder.WhereItem{Field: "type", Opt: builder.Eq, Val: 0})   
 where1 = append(where1, builder.WhereItem{Field: "age", Opt: builder.In, Val: []int{18, 20}})    
where1 = append(where1, builder.WhereItem{Field: "money", Opt: builder.Between, Val: []float64{100.1, 200.9}})   
 where1 = append(where1, builder.WhereItem{Field: "money", Opt: builder.Eq, Val: 100.15})   
 where1 = append(where1, builder.WhereItem{Field: "name", Opt: builder.Like, Val: []string{"%", "li", "%"}})       
 
aorm.Use(db).Debug(true).Table("person").WhereArr(where1).GetMany(&listByWhere)   
 for i := 0; i < len(listByWhere); i++ {  
      fmt.Println(listByWhere[i])   
 }
Yukarıdaki gibi builder.WhereItem'in bir dilimini (dizisini) tanımlayabilir ve ardından dizideki öğeleri ön uçtan geçen bilgilere göre artırabilir veya azaltabilir ve son olarak sorgu dizisini son sorgu için aorm'a geçirebilir ve sonunda sonucu al.
Yukarıdaki örnekten de görülebileceği gibi, PHP gibi, sadece anahtar alan adlarını ve anahtar verilerini girmeniz yeterlidir.Diğer sql anahtar kelimeleri ve çeşitli koşulların eklenmesi, aorm kütüphanesi sizin için otomatik olarak tamamlayacaktır. Dilbilgisi hataları ve yazım hataları sorununu mükemmel bir şekilde çözer.