27 Nisan 2020 Pazartesi

SpringData MongoDB MongoTemplate Sınıfı

Giriş
MongoOperations arayüzünden kalıtır. MongoOperations için şu satırı dahil ederiz.
import org.springframework.data.mongodb.core.MongoOperations;
Bu sınıf MongoDB bağlantısı için SimpleMongoDbFactory bean'ini kullanılır.

Bu sınıfı kodla yaratmak yerine AbstractMongoConfiguration sınıfının yaratmasını kullanmak daha kolay.

Bu sınıf yerine MongoRepository de kullanılabilir.

Maven
Şu satırı dahil ederiz.
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>1.5.0.RELEASE</version>
</dependency>
constructor - MongoDbFactory + MongoConverter
İlk parametre olan MongoDbFactory arayüzü olarak, nu arayüzden kalıtan MongoDbFactorySupport, SimpleMongoClientDbFactory, SimpleMongoDbFactory kullanılır.
Örnek
Şöyle yaparız.
@Bean
MongoDbFactory mongoDbFactory() throws Exception {
  return new SimpleMongoDbFactory(...,...);
}

MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory(),
  new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));

MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);
Örnek
Şöyle yaparız. Belirtilen uri'deki mongo veritabanına bağlanır.
@Configuration
public class MongoConfig {

  @Value("${spring.data.mongodb.uri}")
  private String uri;

  @Bean
  public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(new SimpleMongoClientDbFactory(
      new ConnectionString(this.uri)));
  }
}
bulkOps metodu
Örnek - bulk insert
Şöyle yaparız
public void bulkInsertEvents(List<FoodEvent> foodEventList) {
  try {
    BulkWriteResult bulkWriteResult = mongoTemplatealo
.bulkOps(BulkOperations.BulkMode.UNORDERED, FoodEvent.class)
      .insert(foodEventList)
      .execute();
  } catch (BulkWriteException bwe) {
    List<Integer> failedEventIndexes = new ArrayList<>();
    for (BulkWriteError e : bwe.getWriteErrors()) {
      failedEventIndexes.add(e.getIndex());
      log.error("Insertion failed for index: {} with error: {}", e.getIndex(), e);
    }
  } catch (Exception e) {
    log.error("failed for {} events: {}", foodEventList.size(), foodEventList, e);
  }
}
Örnek
Şöyle yaparız
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED);
bulkOps.upsert(upsertList);
bulkOps.updateMulti(deletList);
return bulkOps.execute();
find metodu
Örnek
Şöyle yaparız
@Autowired MongoTemplate template = ...; Criteria criteria = Criteria.where("mins").lte(30); Query query = new Query(); query.addCriteria(criteria); List<Recipe> recipes = template.find(query);
findAndModify metodu
updateMulti() gibi çalışır. Farklı olarak nesnenin değiştirilmeden önceki halini döndürür.

Örnek
Şöyle yaparız
Foo foo = mongoTemplate.findAndModify(
  query(where("_id").is(...)),
  new Update().inc("seq",1),
  options().returnNew(true).upsert(true),
  Foo.class);
findOne metodu
Şöyle yaparız.
@Override
public User findUserByUserName(String userName) {
  return mongoTemplate.findOne(
    new Query(Criteria.where("_id").is(userName)), User.class);
}
Örnek
Şöyle yaparız
public User getUser(String userId) {
  Query query = new Query().addCriteria(Criteria.where("userId").is(userId));
  return mongoTemplate.findOne(query,User.class,"user");
}
getCollection metodu
Şöyle yaparız.
DBCollection collection = mongoTemplate.getCollection(DbCollections.news);
insert metodu
Eğer _id zaten collection'da varsa exception fırlatır.

Örnek
Şöyle yaparız
public User saveUser(User user) {
  User insertedUser = mongoTemplate.insert(user,"user");
  return insertedUser;
}
remove metodu - Query query +  Class<?> entityClass + String collectionName
Örnek
Elimizde şöyle bir collection olsun
{
  _id
  company_id
  job_type
  name
  age
  ...
}
Elimizde şöyle bir kod olsun
val criteria = Criteria.where("company_id").isEqualTo(companyId)
.and("job_type").isEqualTo(jobType) val query = Query(criteria).limit(3)
Şöyle yaparız
mongoTemplate.remove(query, null, "collection_name")
save metodu
Eğer nesnenin id alanı boş ise yaratır, doluysa günceller. Açıklaması şöyle
If a document does not exist with the specified _id value, the save() method performs an insert with the specified fields in the document.

If a document exists with the specified _id value, the save() method performs an update, replacing all field in the existing record with the fields from the document.
Örnek
Şöyle yaparız.
@Override
public void saveUser(User user) {
  mongoTemplate.save(user);
}
updateFirst metodu
Verilen Query kriterine uyan ilk nesneyi günceller.
Örnek
Şöyle yaparız
public int updateMail(User updatedUser) {
  String newMail = updatedUser.getEmail();
  Query query = new Query().addCriteria(Criteria.where("userId").
    is(updatedUser.getUserId()));

  Update update = new Update();
  update.set("email",newMail);
  return (int)mongoTemplate.updateFirst(query,update,User.class,"user")
    .getModifiedCount();
}

updateMulti metodu
Verilen Query kriterine uyan tüm nesneleri günceller.

upsert metodu -  Query query +  Object + Class<?> entityClass
Bu metodun ismi saveOrUpdate() de olabilirdir. Eğer parametre olarak verilen nesne varsa günceller, yoksa yaratır.

Hiç yorum yok:

Yorum Gönder