Oluştur, Oku, Güncelle, Sil
Isar Plus ile CRUD işlemlerine hakim olun
Oluştur, Oku, Güncelle, Sil
Isar koleksiyonlarınızı CRUD işlemleriyle nasıl yöneteceğinizi öğrenin.
Isar'ı Açmak
Herhangi bir işlem yapmadan önce bir Isar örneğine ihtiyacınız var. Her örnek yazma izni olan bir dizin gerektirir.
import 'package:isar_plus/isar_plus.dart';
import 'package:path_provider/path_provider.dart';
void main() async {
final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.openAsync(
schemas: [RecipeSchema, UserSchema],
directory: dir.path,
);
}name parametresiyle farklı isimlere sahip birden fazla örnek açabilirsiniz.
Yapılandırma Seçenekleri
| Config | Açıklama |
|---|---|
name | Farklı isimlerle birden fazla örnek açın. Varsayılan: "default" |
directory | Depolama konumu. Bellek içi veritabanı için Isar.sqliteInMemory kullanın |
maxSizeMib | MiB cinsinden maksimum boyut. Varsayılan: 2048 |
relaxedDurability | Dayanıklılığı performansla değiştirir |
final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.openAsync(
schemas: [UserSchema],
directory: dir.path,
);final isar = Isar.open(
schemas: [UserSchema],
name: 'myInstance',
directory: '/custom/path',
maxSizeMib: 512,
);final isar = Isar.open(
schemas: [UserSchema],
directory: Isar.sqliteInMemory,
);Create (Insert)
Nesne Oluştur
final user = User()
..name = 'Jane Doe'
..age = 28
..email = 'jane@example.com';Yazma İşlemiyle Ekle
await isar.writeAsync((isar) async {
isar.users.put(user);
});Nesneler oluştururken otomatik artan bir ID almak için collection.autoIncrement() kullanın.
Toplu Ekleme
final users = [
User()..name = 'Alice'..age = 25,
User()..name = 'Bob'..age = 30,
User()..name = 'Charlie'..age = 35,
];
await isar.writeAsync((isar) async {
isar.users.putAll(users);
});Veri değişikliklerinde her zaman yazma işlemleri (write transaction) kullanın!
Read (Query)
ID ile Getir
final user = await isar.users.get(1);
if (user != null) {
print('Bulundu: ${user.name}');
}Birden Fazla ID ile Getir
final users = await isar.users.getAll([1, 2, 3]);Hepsini Getir
final allUsers = await isar.users.where().findAll();İlk Kaydı Bul
final firstUser = await isar.users.where().findFirst();Sayım
final count = await isar.users.count();
print('Toplam kullanıcı: $count');Update
// Nesneyi al
final user = await isar.users.get(1);
if (user != null) {
// Değiştir
user.name = 'Updated Name';
user.age = 30;
// Kaydet
await isar.writeAsync((isar) async {
isar.users.put(user);
});
}await isar.writeAsync((isar) async {
final user = await isar.users.get(1);
if (user != null) {
user.age = (user.age ?? 0) + 1;
isar.users.put(user);
}
});await isar.writeAsync((isar) async {
final adults = await isar.users
.where()
.ageGreaterThan(18)
.findAll();
for (var user in adults) {
user.verified = true;
isar.users.put(user);
}
});put metodu upsert gibi çalışır — ID yoksa ekler, varsa günceller.
Delete
ID ile Sil
await isar.writeAsync((isar) async {
final success = isar.users.delete(1);
print('Silindi: $success');
});Birden Fazla ID ile Sil
await isar.writeAsync((isar) async {
final count = isar.users.deleteAll([1, 2, 3]);
print('$count kullanıcı silindi');
});Nesneyi Sil
await isar.writeAsync((isar) async {
final user = await isar.users.get(1);
if (user != null) {
isar.users.delete(user.id);
}
});Hepsini Sil
await isar.writeAsync((isar) async {
isar.users.clear();
});clear() tüm koleksiyonu siler; dikkatli olun!
Filtreyle Sil
await isar.writeAsync((isar) async {
final deletedCount = await isar.users
.where()
.ageLessThan(18)
.deleteAll();
print('$deletedCount kullanıcı silindi');
});İşlemler
Tüm yazma işlemleri bir transaction içinde olmalıdır:
await isar.writeAsync((isar) async {
// Create
final user = User()..name = 'Test';
isar.users.put(user);
// Update
user.name = 'Updated';
isar.users.put(user);
// Delete
isar.users.delete(user.id);
// Tüm işlemler atomic
});Bir hata oluşursa transaction içindeki tüm değişiklikler otomatik olarak geri alınır.
Okuma İşlemleri
Birden fazla okumada daha iyi performans için:
final results = await isar.readAsync((isar) async {
final users = await isar.users.where().findAll();
final count = isar.users.count();
return {'users': users, 'count': count};
});En İyi Uygulamalar
-
Toplu İşlemler Kullanın
// ✅ İyi - Tek transaction await isar.writeAsync((isar) async { isar.users.putAll(manyUsers); }); // ❌ Kötü - Birden fazla transaction for (var user in manyUsers) { await isar.writeAsync((isar) async { isar.users.put(user); }); } -
Transaction Kapsamını Küçük Tutun
// ✅ İyi final data = prepareData(); await isar.writeAsync((isar) async { isar.users.putAll(data); }); // ❌ Kötü await isar.writeAsync((isar) async { final data = prepareData(); // Ağır işlem transaction içinde isar.users.putAll(data); }); -
Silmeden Önce Kontrol Edin
await isar.writeAsync((isar) async { final exists = await isar.users.get(id) != null; if (exists) { isar.users.delete(id); } });
Hata Yönetimi
try {
await isar.writeAsync((isar) async {
isar.users.put(user);
});
} catch (e) {
print('Hata: $e');
// Transaction otomatik olarak geri alınır
}Sonraki Adımlar
Son Güncelleme