Isar Plus

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.

main.dart
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

ConfigAçıklama
nameFarklı isimlerle birden fazla örnek açın. Varsayılan: "default"
directoryDepolama konumu. Bellek içi veritabanı için Isar.sqliteInMemory kullanın
maxSizeMibMiB cinsinden maksimum boyut. Varsayılan: 2048
relaxedDurabilityDayanı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

  1. 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);
      });
    }
  2. 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);
    });
  3. 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