TypeScript ve JavaScript Icin Bir ORM: TypeORM

Merhaba. Bu yazıda TypeScript ve JavaScript Icin Bir ORM: TypeORM hakkında açıklamalarda bulunacağım. Bir onceki yazida SQL Server hakkinda bilgiler mevcut.

TypeScript ve JavaScript Icin Bir ORM: TypeORM

TypeScript ve JavaScript Icin Bir ORM: TypeORM

Oncelikle TypeORM gercekten bir ORM. TypeScript ile yazilmis. NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native gibi birden fazla teknolojide kullanilabiliyor. Tabi JavaScript tarafinda ES5 destegi de sunuyor.

TypeORM hem Active Records yapisini hem de Data Mapper yapisini ayni anda size sunmakta. Hangisini tercih ederseniz onu kullanabilirsiniz. Bunun avantaji daha maintainable uygulamalar yazmaniza imkan tanimasi tabi.

Kendisi bircok ORM’in destekledigi ozellikleri sunuyor. Zaten Java dunyasindan bildigimiz Hibernate, PHP dunyasindan bildigimiz Doctrine ve .NET tarafinin krali olan Entity Frameworkten esinlenerek olusturulmus. Coklu kalitim desenini destekliyor. Ayrica tek yonlu ya da cok yonlu calisilabildigi gibi kendi kendinin referansi olabilir.

Acikcasi tum bilgileri yazmak isterdim ancak cok uzun bir yaziya donusecek.

Kurulum

Kurulum npm uzerinden gerceklesiyor. Muhtemelen yarn uzerinde de mevcuttur. Ama biz npm uzerinden kurulum gerceklestirecegiz.

Bunun ardindan reflect metadata modulune de ihtiyacimiz var onu da kuralim

Ihtiyac duyma ihtimalimize karsin asagidaki modulu de kuralim:

Sorun yasamadiysak TypeORM kurulumunu basariyla gerceklestirdik. Yukarida iki kurulum turu var. Birincil tur proje bazli. Digeri ise global olani. Biz global uzerinden ilerleyecegiz ilk basta.

Ben bu yazida PostgreSQL kullandim. Bundan dolayi da baglantilarimi saglayabilecegim bir wrapper kurmam gerekiyor.

Ilk Uygulamamiz

Simdi TypeORM ile ilk uygulamamizi yapalim. Komut satirina su komutu verelim:

Bu komut Library adinda bir proje olusturacak. Veri tabani olarak da postgresql kullanacak. Tum database turleri icin asagidakiler kullanilabilir:

Ardindan cd komutu ile Library klasorune gidelim. Ve bagimliliklari kuralim:

Bu yontem yukarida yaptigimiz tabiri caizse amelelikten kurtulmamiza imkan taniyacak. Cunku yukaridaki adim adim npm install yerine typeorm-cli bunu sizin icin hallediyor. Simdi proje klasorunuzde ormconfig.json adinda bir dosya bulunmakta. Bu dosyada database ayarlarini configure etmeniz gerekmekte. Ornegin benim ayarlar bu sekilde:

TypeScript ve JavaScript Icin Bir ORM: TypeORM

 

Ardindan hemen asagidaki komutu calistiralim:

Fark ettiyseniz sanki ufak bi hareketlenme oldu bir seyler eklemeye calisti gibi. Bu arada olusturdugumuz entityler ve migrationlarin nerede bulundugunu da goruyoruz yukaridaki gorselde. Bu dosya dedigim gibi ormconfig.json dosyasi. Tabi burada migration islemlerine falan girisecek isek bunu package.json dosyasinda duzenlememiz cok daha iyi olacak. Ornegin bir migration yapacagiz:

Ardindan bu migrationlarin run edilmesi gerekiyor. Bu asamada package.json dosyamiz soyle olacak:

Bu sayede npm run migrate dedigimizde migrationlar gerceklesecek. Neyse fazla uzatmayalim.

Ilk Modelimizi Yazalim

Yeni bir entity olusturacagiz. Bunun icin entity klasoru altina sececeginiz isimde bir dosya olusturun. Mesela Post.ts gibi. Ornegin benim model dosyam asagidaki gibi:

Class icerisinde kullanilan decoratorler o kolonun ne oldugunu belirtiyorlar. Ornegin id icin PrimaryGeneratedColumn decoratorunu ayarlamisiz ki bunun postgresql database yapisinda serial turunden bir kolon oldugunu belirtelim diye. Decoratorler veri turu cinsinden parametre de aliyorlar. Ornegin:

Database’e Ilk Verilerimizi Ekleyelim

Simdi proje dizinimize gidelim. Burada yer alan index.ts dosyasinda zaten hazirda bir yapi var ama biz kendi yazdigimiz modelden veri tabani tablosu uretip bu tabloya ekleme gerceklestirecegiz:

createConnection() isimli fonksiyonun icerisinde asagidaki kodu yazalim ve aciklayalim:

Oncelikle entity framework tarafindan asina olanlar icin bu yapi tanidik geliyor. Burada tek farkli olan attributelara yani kolonlara degerlerini verdikten sonra connection manager’da bulunan save metoduna instance passlaniyor. Bu connection manager promise donuyor. Bu yuzden await keywordunu yazdik. Ardindan da eklenen icerige dair belirttigimiz primary kolonun degerini alabiliyoruz.

findOne() ile ID’ye Gore Getirme

Eger auto complete ozelligine sahip bir  editore sahipseniz manager’dan sonra otomatik tamamlanan metodlarda delete, update gibi metodlarin hatta ID’lere gore getirme ozelliginin de oldugunu gorebilirsiniz. Ornek:

findByIds() ile Birden Fazla ID’ye Gore Sorgulama

Yukaridaki yontem tek bir sonuc dondurecektir. Eger belirttiginiz birden fazla ID’ye gore deger getirmek isterseniz asagidaki yapi size uygun olacaktir:

find() Fonksiyonu ile Tum Kolonlarda Sorgulama

Eger bunlarin disinda var olan kolonlara gore bir sorgulama yapmak istiyorsaniz asagidaki yapiyi kullanmaniz daha iyi olacaktir:

Query Builder

İsterseniz query builder ile guvenli bir sekilde queryler olusturabilirsiniz. Ornek bir sorgu:

Bu yazida TypeScript ve JavaScript Icin Bir ORM: TypeORM hakkinda ufak tefek bilgiler elde ettik.

Umarim faydali olabilmisimdir. Sadece soylemek istediklerim siz bunu direkt bi CLI tool icin kullanacaksaniz queryler yavas calisiyor. Yani result alindiktan sonra close islemi uzun suruyor. Belki benim makinemle alakalidir. Eksik ya da hatali noktalarin oldugunu dusunuyorsaniz bu yazi altina yorum atarak o kisimlari duzeltmemi saglayabilirsiniz.

Resmi Site: http://typeorm.io

OKudugunuz icin tesekkur ederim. Iyi calismalar.