diff --git a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java index 75685958d9..d9214c182b 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java @@ -2,11 +2,13 @@ package org.baeldung.config; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import com.mongodb.Mongo; import com.mongodb.MongoClient; @Configuration +@EnableMongoRepositories(basePackages = "org.baeldung.repository") public class MongoConfig extends AbstractMongoConfiguration { @Override @@ -20,7 +22,7 @@ public class MongoConfig extends AbstractMongoConfiguration { } @Override - protected String getMappingBasePackage() { + public String getMappingBasePackage() { return "org.baeldung"; } } diff --git a/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java b/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java index 82a6716793..846e2f18bf 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java @@ -1,68 +1,8 @@ package org.baeldung.repository; -import java.util.List; - +import org.springframework.data.mongodb.repository.MongoRepository; import org.baeldung.model.User; -import org.springframework.beans.factory.annotation.Autowired; -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.mongodb.core.query.Update; -import org.springframework.stereotype.Repository; -import com.mongodb.WriteResult; +public interface UserRepository extends MongoRepository { -@Repository -public class UserRepository { - - @Autowired - private MongoTemplate mongoTemplate; - - public void insertUser(final User user) { - mongoTemplate.insert(user, "user"); - } - - public List listUser() { - return mongoTemplate.findAll(User.class, "user"); - } - - public void removeUser(final User user) { - mongoTemplate.remove(user, "user"); - } - - public void saveUser(final User user) { - mongoTemplate.save(user, "user"); - } - - public User findAndModifyUser(final String name, final String newName) { - final Query query = new Query(); - query.addCriteria(Criteria.where("name").is(name)); - final Update update = new Update(); - update.set("name", newName); - return mongoTemplate.findAndModify(query, update, User.class); - } - - public void updateFirstUser(final String name, final String newName) { - final Query query = new Query(); - query.addCriteria(Criteria.where("name").is(name)); - final Update update = new Update(); - update.set("name", newName); - mongoTemplate.updateFirst(query, update, User.class); - } - - public WriteResult upsertUser(final String name, final String newName) { - final Query query = new Query(); - query.addCriteria(Criteria.where("name").is(name)); - final Update update = new Update(); - update.set("name", newName); - return mongoTemplate.upsert(query, update, User.class); - } - - public void updateMultiUser(final String name, final String newName) { - final Query query = new Query(); - query.addCriteria(Criteria.where("name").is(name)); - final Update update = new Update(); - update.set("name", newName); - mongoTemplate.updateMulti(query, update, User.class); - } } diff --git a/spring-data-mongodb/src/main/java/org/baeldung/service/UserService.java b/spring-data-mongodb/src/main/java/org/baeldung/service/UserService.java new file mode 100644 index 0000000000..9d4643ddd6 --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/baeldung/service/UserService.java @@ -0,0 +1,67 @@ +package org.baeldung.service; + +import java.util.List; + +import org.baeldung.model.User; +import org.springframework.beans.factory.annotation.Autowired; +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.mongodb.core.query.Update; + +import com.mongodb.WriteResult; + + +public class UserService { + + @Autowired + private MongoTemplate mongoTemplate; + + public void insertUser(User user) { + mongoTemplate.insert(user, "user"); + } + + public List listUser() { + return mongoTemplate.findAll(User.class, "user"); + } + + public void removeUser(User user) { + mongoTemplate.remove(user, "user"); + } + + public void saveUser(User user) { + mongoTemplate.save(user, "user"); + } + + public User findAndModifyUser(String name, String newName) { + Query query = new Query(); + query.addCriteria(Criteria.where("name").is(name)); + Update update = new Update(); + update.set("name", newName); + return mongoTemplate.findAndModify(query, update, User.class); + } + + public void updateFirstUser(String name, String newName) { + Query query = new Query(); + query.addCriteria(Criteria.where("name").is(name)); + Update update = new Update(); + update.set("name", newName); + mongoTemplate.updateFirst(query, update, User.class); + } + + public WriteResult upsertUser(String name, String newName) { + Query query = new Query(); + query.addCriteria(Criteria.where("name").is(name)); + Update update = new Update(); + update.set("name", newName); + return mongoTemplate.upsert(query, update, User.class); + } + + public void updateMultiUser(String name, String newName) { + Query query = new Query(); + query.addCriteria(Criteria.where("name").is(name)); + Update update = new Update(); + update.set("name", newName); + mongoTemplate.updateMulti(query, update, User.class); + } +} diff --git a/spring-data-mongodb/src/main/resources/mongoConfig.xml b/spring-data-mongodb/src/main/resources/mongoConfig.xml index e9523a2ca6..361c483e60 100644 --- a/spring-data-mongodb/src/main/resources/mongoConfig.xml +++ b/spring-data-mongodb/src/main/resources/mongoConfig.xml @@ -1,15 +1,15 @@ - - @@ -21,4 +21,6 @@ + + \ No newline at end of file diff --git a/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java index a7ac9f562f..b5c7befa16 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java @@ -3,6 +3,8 @@ package org.baeldung.repository; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +import java.util.List; + import org.baeldung.config.MongoConfig; import org.baeldung.model.User; import org.junit.After; @@ -10,6 +12,10 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; 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.domain.Sort; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -17,7 +23,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { MongoConfig.class, UserRepository.class }) +@ContextConfiguration(classes = MongoConfig.class) public class UserRepositoryIntegrationTest { @Autowired @@ -36,13 +42,11 @@ public class UserRepositoryIntegrationTest { mongoOps.dropCollection(User.class); } - // tests - @Test public void testInsert() { - final User user = new User(); + User user = new User(); user.setName("Jon"); - userRepository.insertUser(user); + userRepository.insert(user); assertThat(mongoOps.findOne(Query.query(Criteria.where("name").is("Jon")), User.class).getName(), is("Jon")); } @@ -51,84 +55,84 @@ public class UserRepositoryIntegrationTest { public void testSave() { User user = new User(); user.setName("Jack"); - userRepository.insertUser(user); + mongoOps.insert(user); user = mongoOps.findOne(Query.query(Criteria.where("name").is("Jack")), User.class); - final String id = user.getId(); + String id = user.getId(); user.setName("Jim"); - userRepository.saveUser(user); + userRepository.save(user); assertThat(mongoOps.findOne(Query.query(Criteria.where("id").is(id)), User.class).getName(), is("Jim")); } @Test - public void testUpdateFirst() { + public void testDelete() { User user = new User(); - user.setName("Alex"); - mongoOps.insert(user); - - user = new User(); - user.setName("Alex"); - mongoOps.insert(user); - - userRepository.updateFirstUser("Alex", "James"); - - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("James")), User.class).size(), is(1)); - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Alex")), User.class).size(), is(1)); - } - - @Test - public void testUpdateMulti() { - User user = new User(); - user.setName("Eugen"); - mongoOps.insert(user); - - user = new User(); - user.setName("Eugen"); - mongoOps.insert(user); - - userRepository.updateMultiUser("Eugen", "Victor"); - - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Victor")), User.class).size(), is(2)); - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Eugen")), User.class).size(), is(0)); - } - - @Test - public void testFindAndModify() { - User user = new User(); - user.setName("Markus"); - mongoOps.insert(user); - - user = userRepository.findAndModifyUser("Markus", "Nick"); - - assertThat(user.getName(), is("Markus")); - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Nick")), User.class).size(), is(1)); - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Markus")), User.class).size(), is(0)); - } - - @Test - public void testUpsert() { - final User user = new User(); - user.setName("Markus"); - mongoOps.insert(user); - - userRepository.upsertUser("Markus", "Nick"); - - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Nick")), User.class).size(), is(1)); - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Markus")), User.class).size(), is(0)); - } - - @Test - public void testRemove() { - final User user = new User(); user.setName("Benn"); mongoOps.insert(user); - assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Benn")), User.class).size(), is(1)); - - userRepository.removeUser(user); + userRepository.delete(user); assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Benn")), User.class).size(), is(0)); } + + @Test + public void testFindOne() { + User user = new User(); + user.setName("Chris"); + mongoOps.insert(user); + + user = mongoOps.findOne(Query.query(Criteria.where("name").is("Chris")), User.class); + User foundUser = userRepository.findOne(user.getId()); + + assertThat(user.getName(), is(foundUser.getName())); + } + + @Test + public void testExists() { + User user = new User(); + user.setName("Harris"); + mongoOps.insert(user); + + user = mongoOps.findOne(Query.query(Criteria.where("name").is("Harris")), User.class); + boolean isExists = userRepository.exists(user.getId()); + + assertThat(isExists, is(true)); + } + + @Test + public void testFindAllWithSort() { + User user = new User(); + user.setName("Brendan"); + mongoOps.insert(user); + + user = new User(); + user.setName("Adam"); + mongoOps.insert(user); + + List users = userRepository.findAll(new Sort(Sort.Direction.ASC, "name")); + + assertThat(users.size(), is(2)); + assertThat(users.get(0).getName(), is("Adam")); + assertThat(users.get(1).getName(), is("Brendan")); + } + + @Test + public void testFindAllWithPageable() { + User user = new User(); + user.setName("Brendan"); + mongoOps.insert(user); + + user = new User(); + user.setName("Adam"); + mongoOps.insert(user); + + Pageable pageableRequest = new PageRequest(0, 2); + + Page users = userRepository.findAll(pageableRequest); + + assertThat(users.getTotalPages(), is(1)); + assertThat(users.iterator().next().getName(), is("Brendan")); + } }