Merge pull request #230 from alex-semenyuk/master
Examples with MongoRepositories.
This commit is contained in:
commit
90937c825d
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<User, String> {
|
||||
|
||||
@Repository
|
||||
public class UserRepository {
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
public void insertUser(final User user) {
|
||||
mongoTemplate.insert(user, "user");
|
||||
}
|
||||
|
||||
public List<User> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<User> 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);
|
||||
}
|
||||
}
|
|
@ -1,15 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:p="http://www.springframework.org/schema/p"
|
||||
xmlns:p="http://www.springframework.org/schema/p" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
|
||||
http://www.springframework.org/schema/data/mongo
|
||||
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
|
||||
>
|
||||
|
||||
<context:component-scan base-package="org.baeldung"/>
|
||||
|
||||
<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
|
||||
<property name="host" value="localhost"/>
|
||||
</bean>
|
||||
|
@ -21,4 +21,6 @@
|
|||
|
||||
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
|
||||
|
||||
<mongo:repositories base-package="org.baeldung.repository" mongo-template-ref="mongoTemplate"/>
|
||||
|
||||
</beans>
|
|
@ -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<User> 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<User> users = userRepository.findAll(pageableRequest);
|
||||
|
||||
assertThat(users.getTotalPages(), is(1));
|
||||
assertThat(users.iterator().next().getName(), is("Brendan"));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue