Skip to content

Commit 90937c8

Browse files
author
Eugen
committed
Merge pull request eugenp#230 from alex-semenyuk/master
Examples with MongoRepositories.
2 parents 5de9fb3 + a292a07 commit 90937c8

File tree

5 files changed

+125
-110
lines changed

5 files changed

+125
-110
lines changed

spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import org.springframework.context.annotation.Configuration;
44
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
5+
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
56

67
import com.mongodb.Mongo;
78
import com.mongodb.MongoClient;
89

910
@Configuration
11+
@EnableMongoRepositories(basePackages = "org.baeldung.repository")
1012
public class MongoConfig extends AbstractMongoConfiguration {
1113

1214
@Override
@@ -20,7 +22,7 @@ public Mongo mongo() throws Exception {
2022
}
2123

2224
@Override
23-
protected String getMappingBasePackage() {
25+
public String getMappingBasePackage() {
2426
return "org.baeldung";
2527
}
2628
}
Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,8 @@
11
package org.baeldung.repository;
22

3-
import java.util.List;
4-
3+
import org.springframework.data.mongodb.repository.MongoRepository;
54
import org.baeldung.model.User;
6-
import org.springframework.beans.factory.annotation.Autowired;
7-
import org.springframework.data.mongodb.core.MongoTemplate;
8-
import org.springframework.data.mongodb.core.query.Criteria;
9-
import org.springframework.data.mongodb.core.query.Query;
10-
import org.springframework.data.mongodb.core.query.Update;
11-
import org.springframework.stereotype.Repository;
12-
13-
import com.mongodb.WriteResult;
14-
15-
@Repository
16-
public class UserRepository {
17-
18-
@Autowired
19-
private MongoTemplate mongoTemplate;
20-
21-
public void insertUser(final User user) {
22-
mongoTemplate.insert(user, "user");
23-
}
24-
25-
public List<User> listUser() {
26-
return mongoTemplate.findAll(User.class, "user");
27-
}
28-
29-
public void removeUser(final User user) {
30-
mongoTemplate.remove(user, "user");
31-
}
32-
33-
public void saveUser(final User user) {
34-
mongoTemplate.save(user, "user");
35-
}
36-
37-
public User findAndModifyUser(final String name, final String newName) {
38-
final Query query = new Query();
39-
query.addCriteria(Criteria.where("name").is(name));
40-
final Update update = new Update();
41-
update.set("name", newName);
42-
return mongoTemplate.findAndModify(query, update, User.class);
43-
}
44-
45-
public void updateFirstUser(final String name, final String newName) {
46-
final Query query = new Query();
47-
query.addCriteria(Criteria.where("name").is(name));
48-
final Update update = new Update();
49-
update.set("name", newName);
50-
mongoTemplate.updateFirst(query, update, User.class);
51-
}
525

53-
public WriteResult upsertUser(final String name, final String newName) {
54-
final Query query = new Query();
55-
query.addCriteria(Criteria.where("name").is(name));
56-
final Update update = new Update();
57-
update.set("name", newName);
58-
return mongoTemplate.upsert(query, update, User.class);
59-
}
6+
public interface UserRepository extends MongoRepository<User, String> {
607

61-
public void updateMultiUser(final String name, final String newName) {
62-
final Query query = new Query();
63-
query.addCriteria(Criteria.where("name").is(name));
64-
final Update update = new Update();
65-
update.set("name", newName);
66-
mongoTemplate.updateMulti(query, update, User.class);
67-
}
688
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.baeldung.service;
2+
3+
import java.util.List;
4+
5+
import org.baeldung.model.User;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.data.mongodb.core.MongoTemplate;
8+
import org.springframework.data.mongodb.core.query.Criteria;
9+
import org.springframework.data.mongodb.core.query.Query;
10+
import org.springframework.data.mongodb.core.query.Update;
11+
12+
import com.mongodb.WriteResult;
13+
14+
15+
public class UserService {
16+
17+
@Autowired
18+
private MongoTemplate mongoTemplate;
19+
20+
public void insertUser(User user) {
21+
mongoTemplate.insert(user, "user");
22+
}
23+
24+
public List<User> listUser() {
25+
return mongoTemplate.findAll(User.class, "user");
26+
}
27+
28+
public void removeUser(User user) {
29+
mongoTemplate.remove(user, "user");
30+
}
31+
32+
public void saveUser(User user) {
33+
mongoTemplate.save(user, "user");
34+
}
35+
36+
public User findAndModifyUser(String name, String newName) {
37+
Query query = new Query();
38+
query.addCriteria(Criteria.where("name").is(name));
39+
Update update = new Update();
40+
update.set("name", newName);
41+
return mongoTemplate.findAndModify(query, update, User.class);
42+
}
43+
44+
public void updateFirstUser(String name, String newName) {
45+
Query query = new Query();
46+
query.addCriteria(Criteria.where("name").is(name));
47+
Update update = new Update();
48+
update.set("name", newName);
49+
mongoTemplate.updateFirst(query, update, User.class);
50+
}
51+
52+
public WriteResult upsertUser(String name, String newName) {
53+
Query query = new Query();
54+
query.addCriteria(Criteria.where("name").is(name));
55+
Update update = new Update();
56+
update.set("name", newName);
57+
return mongoTemplate.upsert(query, update, User.class);
58+
}
59+
60+
public void updateMultiUser(String name, String newName) {
61+
Query query = new Query();
62+
query.addCriteria(Criteria.where("name").is(name));
63+
Update update = new Update();
64+
update.set("name", newName);
65+
mongoTemplate.updateMulti(query, update, User.class);
66+
}
67+
}

spring-data-mongodb/src/main/resources/mongoConfig.xml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<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"
3-
xmlns:p="http://www.springframework.org/schema/p"
3+
xmlns:p="http://www.springframework.org/schema/p" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
44
xsi:schemaLocation="
55
http://www.springframework.org/schema/beans
66
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
7+
http://www.springframework.org/schema/data/mongo
8+
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
79
http://www.springframework.org/schema/context
810
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
911
>
1012

11-
<context:component-scan base-package="org.baeldung"/>
12-
1313
<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
1414
<property name="host" value="localhost"/>
1515
</bean>
@@ -21,4 +21,6 @@
2121

2222
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
2323

24+
<mongo:repositories base-package="org.baeldung.repository" mongo-template-ref="mongoTemplate"/>
25+
2426
</beans>

spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java

Lines changed: 48 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,27 @@
33
import static org.hamcrest.CoreMatchers.is;
44
import static org.junit.Assert.assertThat;
55

6+
import java.util.List;
7+
68
import org.baeldung.config.MongoConfig;
79
import org.baeldung.model.User;
810
import org.junit.After;
911
import org.junit.Before;
1012
import org.junit.Test;
1113
import org.junit.runner.RunWith;
1214
import org.springframework.beans.factory.annotation.Autowired;
15+
import org.springframework.data.domain.Page;
16+
import org.springframework.data.domain.PageRequest;
17+
import org.springframework.data.domain.Pageable;
18+
import org.springframework.data.domain.Sort;
1319
import org.springframework.data.mongodb.core.MongoOperations;
1420
import org.springframework.data.mongodb.core.query.Criteria;
1521
import org.springframework.data.mongodb.core.query.Query;
1622
import org.springframework.test.context.ContextConfiguration;
1723
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
1824

1925
@RunWith(SpringJUnit4ClassRunner.class)
20-
@ContextConfiguration(classes = { MongoConfig.class, UserRepository.class })
26+
@ContextConfiguration(classes = MongoConfig.class)
2127
public class UserRepositoryIntegrationTest {
2228

2329
@Autowired
@@ -36,13 +42,11 @@ public void tearDown() {
3642
mongoOps.dropCollection(User.class);
3743
}
3844

39-
// tests
40-
4145
@Test
4246
public void testInsert() {
43-
final User user = new User();
47+
User user = new User();
4448
user.setName("Jon");
45-
userRepository.insertUser(user);
49+
userRepository.insert(user);
4650

4751
assertThat(mongoOps.findOne(Query.query(Criteria.where("name").is("Jon")), User.class).getName(), is("Jon"));
4852
}
@@ -51,84 +55,84 @@ public void testInsert() {
5155
public void testSave() {
5256
User user = new User();
5357
user.setName("Jack");
54-
userRepository.insertUser(user);
58+
mongoOps.insert(user);
5559

5660
user = mongoOps.findOne(Query.query(Criteria.where("name").is("Jack")), User.class);
57-
final String id = user.getId();
61+
String id = user.getId();
5862

5963
user.setName("Jim");
60-
userRepository.saveUser(user);
64+
userRepository.save(user);
6165

6266
assertThat(mongoOps.findOne(Query.query(Criteria.where("id").is(id)), User.class).getName(), is("Jim"));
6367
}
6468

6569
@Test
66-
public void testUpdateFirst() {
70+
public void testDelete() {
6771
User user = new User();
68-
user.setName("Alex");
69-
mongoOps.insert(user);
70-
71-
user = new User();
72-
user.setName("Alex");
72+
user.setName("Benn");
7373
mongoOps.insert(user);
7474

75-
userRepository.updateFirstUser("Alex", "James");
75+
userRepository.delete(user);
7676

77-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("James")), User.class).size(), is(1));
78-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Alex")), User.class).size(), is(1));
77+
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Benn")), User.class).size(), is(0));
7978
}
8079

8180
@Test
82-
public void testUpdateMulti() {
81+
public void testFindOne() {
8382
User user = new User();
84-
user.setName("Eugen");
85-
mongoOps.insert(user);
86-
87-
user = new User();
88-
user.setName("Eugen");
83+
user.setName("Chris");
8984
mongoOps.insert(user);
9085

91-
userRepository.updateMultiUser("Eugen", "Victor");
86+
user = mongoOps.findOne(Query.query(Criteria.where("name").is("Chris")), User.class);
87+
User foundUser = userRepository.findOne(user.getId());
9288

93-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Victor")), User.class).size(), is(2));
94-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Eugen")), User.class).size(), is(0));
89+
assertThat(user.getName(), is(foundUser.getName()));
9590
}
9691

9792
@Test
98-
public void testFindAndModify() {
93+
public void testExists() {
9994
User user = new User();
100-
user.setName("Markus");
95+
user.setName("Harris");
10196
mongoOps.insert(user);
10297

103-
user = userRepository.findAndModifyUser("Markus", "Nick");
98+
user = mongoOps.findOne(Query.query(Criteria.where("name").is("Harris")), User.class);
99+
boolean isExists = userRepository.exists(user.getId());
104100

105-
assertThat(user.getName(), is("Markus"));
106-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Nick")), User.class).size(), is(1));
107-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Markus")), User.class).size(), is(0));
101+
assertThat(isExists, is(true));
108102
}
109103

110104
@Test
111-
public void testUpsert() {
112-
final User user = new User();
113-
user.setName("Markus");
105+
public void testFindAllWithSort() {
106+
User user = new User();
107+
user.setName("Brendan");
108+
mongoOps.insert(user);
109+
110+
user = new User();
111+
user.setName("Adam");
114112
mongoOps.insert(user);
115113

116-
userRepository.upsertUser("Markus", "Nick");
114+
List<User> users = userRepository.findAll(new Sort(Sort.Direction.ASC, "name"));
117115

118-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Nick")), User.class).size(), is(1));
119-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Markus")), User.class).size(), is(0));
116+
assertThat(users.size(), is(2));
117+
assertThat(users.get(0).getName(), is("Adam"));
118+
assertThat(users.get(1).getName(), is("Brendan"));
120119
}
121120

122121
@Test
123-
public void testRemove() {
124-
final User user = new User();
125-
user.setName("Benn");
122+
public void testFindAllWithPageable() {
123+
User user = new User();
124+
user.setName("Brendan");
126125
mongoOps.insert(user);
127126

128-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Benn")), User.class).size(), is(1));
127+
user = new User();
128+
user.setName("Adam");
129+
mongoOps.insert(user);
129130

130-
userRepository.removeUser(user);
131+
Pageable pageableRequest = new PageRequest(0, 2);
131132

132-
assertThat(mongoOps.find(Query.query(Criteria.where("name").is("Benn")), User.class).size(), is(0));
133+
Page<User> users = userRepository.findAll(pageableRequest);
134+
135+
assertThat(users.getTotalPages(), is(1));
136+
assertThat(users.iterator().next().getName(), is("Brendan"));
133137
}
134138
}

0 commit comments

Comments
 (0)