Exposed DAO: Varlık Sınıfları ve İlişkiler
Tabloları varlık sınıflarıyla eşlemek ve ilişkiler arasında gezinmek için DAO API'sini kullanın.
Exposed DAO: Varlık Sınıfları ve İlişkiler, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Exposed DAO Katmanı Nedir?
Exposed DAO (Veri Erişim Nesnesi) katmanı, Sorgu DSL'ini Active Record tarzı bir API ile sarmalar. Tablo satırlarına eşlenen Entity alt sınıfları tanımlarsınız ve özellikleri doğrudan varlık örnekleri üzerinden okuyup yazarsınız.
Bir Entity Tanımlama
Bir LongIdTable ile bir Entity alt sınıfını eşleştirin. Her varlık sınıfının, sorguları yöneten bir eşlikçi EntityClass sınıfı vardır:
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val email = varchar("email", 255)
}
class User(id: EntityID<Long>) : LongEntity(id) {
companion object : LongEntityClass<User>(Users)
var name by Users.name
var email by Users.email
}Bir Entity Oluşturma
Yeni bir satır oluşturmak ve karşılığında bir varlık örneği almak için Entity.new { } ifadesini transaction { } içinde kullanın:
val alice: User = transaction {
User.new {
name = "Alice"
email = "alice@example.com"
}
}Entity'leri Bulma
Eşlikçi EntityClass, bulma yöntemleri sağlar: findById(id), all() ve find { condition }:
transaction {
val user: User? = User.findById(1L)
val allUsers: SizedIterable<User> = User.all()
val filtered = User.find { Users.name like "Al%" }.toList()
}Bir Entity'yi Güncelleme
Bir varlığı okuyun, özelliklerini bir işlem içinde değiştirin; işlem tamamlandığında Exposed UPDATE işlemini otomatik olarak gerçekleştirir:
transaction {
val user = User.findById(1L) ?: error("Not found")
user.name = "Alice Smith"
// UPDATE issued on transaction commit
}Bir Entity'yi Silme
Karşılık gelen satırı kaldırmak için bir işlem içinde entity.delete() çağrısını yapın:
transaction {
User.findById(5L)?.delete()
}Bire Çok İlişkiler
Tabloda reference() kullanarak ve varlıkta by ile tanımlanan bir özellik oluşturarak çocuk varlıktan üst varlığa başvurun. Çocuk listesinin üst varlıktan erişilebilmesi için referrersOn kullanın:
object Posts : LongIdTable("posts") {
val title = varchar("title", 300)
val authorId = reference("author_id", Users)
}
class Post(id: EntityID<Long>) : LongEntity(id) {
companion object : LongEntityClass<Post>(Posts)
var title by Posts.title
var author by User referencedOn Posts.authorId
}
// On User entity:
val posts by Post referrersOn Posts.authorIdÇoka Çok İlişkiler
Aracı bir birleştirme tablosu kullanın. Bu tabloyu bir EntityClass olarak sunun ve her iki tarafa via() kullanarak erişin:
object UserRoles : Table("user_roles") {
val user = reference("user_id", Users)
val role = reference("role_id", Roles)
}
// On User entity:
var roles by Role via UserRolesÖnden ve Gecikmeli Yükleme
Exposed, ilişkili varlıkları varsayılan olarak gecikmeli yükler; her erişim bir SQL sorgusu çalıştırır. İlişkileri önceden yüklemek ve N+1 sorgu sorunlarını önlemek için load() veya with() kullanın:
transaction {
User.all().with(User::posts).forEach { user ->
println("${user.name}: ${user.posts.count()} posts")
}
}Bir İşlem İçinde Önbelleğe Alma
Exposed, varlık örneklerini bir işlem içinde önbelleğe alır. Aynı işlemde aynı varlığa kimliği üzerinden birden çok kez erişildiğinde, bellekteki aynı nesne döndürülür; veritabanına gereksiz gidiş gelişler yapılmaz.
DAO ve Sorgu DSL'i Ne Zaman Kullanılmalı
İlişkilerle birlikte nesne yönelimli erişim desenleri istediğinizde DAO katmanını kullanın. Toplu işlemler, karmaşık birleştirmeler, toplulaştırmalar veya performansın önemli olduğu ve SQL üzerinde hassas denetim istediğiniz durumlarda Sorgu DSL'ini kullanın.
Kısa Kontrol
Exposed DAO kullanarak yeni bir satırı nasıl oluşturur ve hemen bir varlık örneği alırsınız?
Özet: Exposed DAO — Entity Sınıfları ve İlişkiler
Önemli çıkarımlar:
- Bir
LongIdTableile birLongEntityalt sınıfını eşleştirin; özellikler sütun tanımlarına delege edilir Entity.new { }— oluşturur;findById(),find { },all()— sorgular;entity.delete()— kaldırır- Bire çok:
referencedOn(çocuk tarafı),referrersOn(üst tarafı) - Çoka çok: birleştirme tablosu +
via() - İlişkileri önceden yüklemek ve N+1 sorgularını önlemek için
with()kullanın
Sıkça Sorulan Sorular
“Exposed DAO: Varlık Sınıfları ve İlişkiler” dersi ücretsiz mi?
Evet — “Exposed DAO: Varlık Sınıfları ve İlişkiler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Exposed DAO: Varlık Sınıfları ve İlişkiler” dersinde ne öğreneceğim?
Tabloları varlık sınıflarıyla eşlemek ve ilişkiler arasında gezinmek için DAO API'sini kullanın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Exposed DAO: Varlık Sınıfları ve İlişkiler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Exposed Kurulumu: Veritabanı Bağlantısı ve İşlem DSL'i
- Table DSL ile Tablolar Tanımlama
- Query DSL ile CRUD: insert, select, update, delete
- Exposed DAO: Varlık Sınıfları ve İlişkiler