Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions spring-boot-mongodb-crud/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,15 @@
<maven.compiler.target>17</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.howtodoinjava.app.config;

import com.howtodoinjava.app.model.GroceryItem;
import com.howtodoinjava.app.repositories.ItemRepository;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import static java.util.Collections.singletonList;

@Configuration
@EnableMongoRepositories(basePackageClasses = ItemRepository.class, mongoTemplateRef = "primaryMongoTemplate")
@EnableConfigurationProperties
public class MongoDbConfig {

@Bean(name = "primaryMongoProperties")
@ConfigurationProperties(prefix = "spring.data.mongodb")
@Primary
public MongoProperties primaryProperties() {
return new MongoProperties();
}

@Bean(name = "primaryMongoClient")
public MongoClient mongoClient(@Qualifier("primaryMongoProperties") MongoProperties mongoProperties) {

MongoCredential credential = MongoCredential.createCredential(
mongoProperties.getUsername(), mongoProperties.getAuthenticationDatabase(), mongoProperties.getPassword());


return MongoClients.create(MongoClientSettings.builder()
.applyToClusterSettings(builder -> builder.hosts(singletonList(
new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort()))))
.credential(credential)
.build());
}

@Primary
@Bean(name = "primaryMongoDBFactory")
public MongoDatabaseFactory mongoDatabaseFactory(@Qualifier("primaryMongoClient") MongoClient mongoClient,
@Qualifier("primaryMongoProperties") MongoProperties mongoProperties) {
return new SimpleMongoClientDatabaseFactory(mongoClient, mongoProperties.getDatabase());
}

@Primary
@Bean(name = "primaryMongoTemplate")
public MongoTemplate mongoTemplate(@Qualifier("primaryMongoDBFactory") MongoDatabaseFactory mongoDatabaseFactory) {
return new MongoTemplate(mongoDatabaseFactory);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.howtodoinjava.app.model;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Data
@NoArgsConstructor
@Document("groceryitems")
public class GroceryItem {

@Id
@Field("id")
private Integer id;
@Field("name")
private String name;
@Field("quantity")
private int quantity;
@Field("category")
private String category;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.howtodoinjava.app.repositories;

import com.howtodoinjava.app.model.GroceryItem;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;

import java.util.List;

public interface ItemRepository extends MongoRepository<GroceryItem, Integer> {

@Query("{name:'?0'}")
GroceryItem findItemByName(String name);

@Query(value="{category:'?0'}", fields="{'name' : 1, 'quantity' : 1}")
List<GroceryItem> findGroceryItemBy(String category);

@Query("{ 'quantity' : { $gt: ?0, $lt: ?1 } }")
List<GroceryItem> findAllByQuantityBetween(int qtyGT, int qtyLT);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.howtodoinjava.app.service;

import com.howtodoinjava.app.model.GroceryItem;

import java.util.List;

public interface MongoRepositoryService {

public GroceryItem addGrocery(GroceryItem groceryItem);
public GroceryItem updateGrocery(GroceryItem groceryItem);
public String deleteGrocery(Integer id);
public List<GroceryItem> getAllGroceries();
public GroceryItem getGroceryById(Integer id);
public GroceryItem findItemByName(String name);
public List<GroceryItem> findAllByCategory(String category);
public List<GroceryItem> findAllByQuantityBetween(int qtyGT, int qtyLT);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.howtodoinjava.app.service;

import com.howtodoinjava.app.model.GroceryItem;

import java.util.List;

public interface MongoTemplateService {

public GroceryItem addGrocery(GroceryItem groceryItem);
public GroceryItem updateGrocery(GroceryItem groceryItem);
public String deleteGrocery(Integer id);
public List<GroceryItem> getAllGroceries();
public GroceryItem getGroceryById(Integer id);
public List<GroceryItem> searchGroceries(String name, Integer minQuantity, Integer maxQuantity,
String category);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.howtodoinjava.app.service.impl;

import com.howtodoinjava.app.model.GroceryItem;
import com.howtodoinjava.app.repositories.ItemRepository;
import com.howtodoinjava.app.service.MongoRepositoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class MongoRepositoryServiceImpl implements MongoRepositoryService {

@Autowired
private ItemRepository itemRepository;

@Override
public GroceryItem addGrocery(GroceryItem groceryItem) {
return itemRepository.save(groceryItem);
}

@Override
public GroceryItem updateGrocery(GroceryItem groceryItem) {
return itemRepository.save(groceryItem);
}

@Override
public List<GroceryItem> getAllGroceries() {
return itemRepository.findAll();
}

@Override
public GroceryItem getGroceryById(Integer id) {
return itemRepository.findById(id).orElse(null);
}

@Override
public GroceryItem findItemByName(String name) {
return itemRepository.findItemByName(name);
}

@Override
public List<GroceryItem> findAllByCategory(String category) {
return itemRepository.findGroceryItemBy(category);
}

@Override
public List<GroceryItem> findAllByQuantityBetween(int qtyGT, int qtyLT) {
return itemRepository.findAllByQuantityBetween(qtyGT, qtyLT);
}

@Override
public String deleteGrocery(Integer id) {
itemRepository.deleteById(id);
return "Success";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.howtodoinjava.app.service.impl;

import com.howtodoinjava.app.model.GroceryItem;
import com.howtodoinjava.app.service.MongoTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.support.PageableExecutionUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class MongoTemplateServiceImpl implements MongoTemplateService {

@Autowired
private MongoTemplate mongoTemplate;

@Override
public GroceryItem addGrocery(GroceryItem groceryItem) {
return mongoTemplate.save(groceryItem);
}

@Override
public GroceryItem updateGrocery(GroceryItem groceryItem) {
//GroceryItem fetchedItem = mongoTemplate.findById(groceryItem.getId(), GroceryItem.class);
//fetchedItem.setName(groceryItem.getName());
//fetchedItem.setQuantity(groceryItem.getQuantity());
//fetchedItem.setCategory(groceryItem.getCategory());
//mongoTemplate.save(fetchedItem);
return mongoTemplate.save(groceryItem);
}

@Override
public String deleteGrocery(Integer id) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(id));
mongoTemplate.remove(query, GroceryItem.class);
return "Success";
}

@Override
public List<GroceryItem> getAllGroceries() {
return mongoTemplate.findAll(GroceryItem.class);
}

@Override
public GroceryItem getGroceryById(Integer id) {
return mongoTemplate.findById(id, GroceryItem.class);
}

@Override
public List<GroceryItem> searchGroceries(String name, Integer minQuantity, Integer maxQuantity,
String category) {

Query query = new Query();
List<Criteria> criterias = new ArrayList<>();

if(name !=null && !name.isEmpty()) {
criterias.add(Criteria.where("name").is(name));
}

if(minQuantity !=null && maxQuantity !=null) {
criterias.add(Criteria.where("quantity").gte(minQuantity).lte(maxQuantity));
}

if(category !=null && !category.isEmpty()) {
criterias.add(Criteria.where("category").is(category));
}

if(!criterias.isEmpty()) {
Criteria criteria = new Criteria().andOperator(criterias.toArray(new Criteria[criterias.size()]));

query.addCriteria(criteria);

}

List<GroceryItem> groceryItems = mongoTemplate.find(query, GroceryItem.class);

return groceryItems;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=groceryitems
#spring.data.mongodb.password= (optional)
#spring.data.mongodb.username= (optional)
Loading