spring-data-mongodb使用示例

x33g5p2x  于2021-12-25 转载在 Go  
字(18.9k)|赞(0)|评价(0)|浏览(457)

一: 引入所需要的依赖

  1. <!-- mongodb -->
  2. <dependency>
  3. <groupId>org.mongodb</groupId>
  4. <artifactId>mongo-java-driver</artifactId>
  5. <version>3.3.0</version>
  6. </dependency>
  7. <!-- spring-data-mongodb -->
  8. <dependency>
  9. <groupId>org.springframework.data</groupId>
  10. <artifactId>spring-data-mongodb</artifactId>
  11. <version>1.9.4.RELEASE</version>
  12. </dependency>

二:mongodb与Spring集成

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  3. <!-- MongoDB -->
  4. <mongo:mongo id="mongo" host="127.0.0.1" port="27017">
  5. </mongo:mongo>
  6. <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  7. <constructor-arg ref="mongo" />
  8. <constructor-arg name="databaseName" value="mydb" />
  9. </bean>
  10. </beans>

三: 测试

实体类:Member

  1. package com.mengdee.manager.domain;
  2. import java.io.Serializable;
  3. public class Member implements Serializable {
  4. private static final long serialVersionUID = 5157900066984701447L;
  5. private Integer id;
  6. private String username;
  7. private String password;
  8. private Integer sex;
  9. private Integer age;
  10. private String email;
  11. public Member(Integer id, String username, String password, Integer sex, Integer age, String email) {
  12. super();
  13. this.id = id;
  14. this.username = username;
  15. this.password = password;
  16. this.sex = sex;
  17. this.age = age;
  18. this.email = email;
  19. }
  20. // getter && setter
  21. @Override
  22. public String toString() {
  23. return "Member [id=" + id + ", username=" + username + ", password=" + password + ", sex=" + sex + ", age="
  24. + age + ", email=" + email + "]";
  25. }
  26. }

MongoDBTest

  1. package com.mengdee.manager.user;
  2. import java.util.List;
  3. import java.util.Set;
  4. import java.util.regex.Pattern;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import org.junit.runner.RunWith;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.data.domain.Sort;
  10. import org.springframework.data.domain.Sort.Direction;
  11. import org.springframework.data.mongodb.core.MongoTemplate;
  12. import org.springframework.data.mongodb.core.mapreduce.GroupBy;
  13. import org.springframework.data.mongodb.core.mapreduce.GroupByResults;
  14. import org.springframework.data.mongodb.core.query.Criteria;
  15. import org.springframework.data.mongodb.core.query.Query;
  16. import org.springframework.test.context.ContextConfiguration;
  17. import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
  18. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  19. import com.mengdee.manager.domain.Member;
  20. import com.mongodb.BasicDBList;
  21. import com.mongodb.BasicDBObject;
  22. import com.mongodb.DB;
  23. @ContextConfiguration(locations = {"classpath:conf/spring/spring-*.xml"})
  24. @RunWith(SpringJUnit4ClassRunner.class)
  25. public class MongoDBTest extends AbstractJUnit4SpringContextTests{
  26. @Autowired
  27. private MongoTemplate mongoTemplate;
  28. @Before
  29. public void tearUp(){
  30. // 数据库
  31. DB db = mongoTemplate.getDb();
  32. System.out.println(db.getName());
  33. // 获取所有集合
  34. Set<String> collectionNames = mongoTemplate.getCollectionNames();
  35. System.out.println(collectionNames);
  36. for (String collectionName : collectionNames) {
  37. long count = mongoTemplate.count(new Query(), Member.class);
  38. System.out.println("total doc count:" + count);
  39. if ("member".equals(collectionName)) {
  40. // 获取指定的集合对应的文档
  41. List<Member> members = mongoTemplate.findAll(Member.class, collectionName);
  42. printMembers("findAll", members);
  43. }
  44. }
  45. boolean collectionExists = mongoTemplate.collectionExists(Member.class);
  46. System.out.println("member collection isExists:" + collectionExists);
  47. if (collectionExists) {
  48. // mongoTemplate.dropCollection(Member.class);
  49. }
  50. }
  51. // 在保存集合时,如果集合不存在,集合的名字默认为实体类的名字,名字全部小写
  52. // insert : 当_id 重复插入时会被忽略
  53. // save: 当_id值相同时就更新, 否则就插入(addOrUpdate)
  54. @Test
  55. public void testInsert(){
  56. Member member1 = new Member(1, "mengdee1", "111111", 1, 15, "mengdee1@163.com");
  57. mongoTemplate.insert(member1);
  58. Member member11 = new Member(1, "mengdee11", "222222", 2, 20, "mengdee11@163.com");
  59. mongoTemplate.insert(member11);
  60. Member member111 = new Member(1, "mengdee111", "123456", 1, 17, "mengdee111@163.com");
  61. mongoTemplate.save(member111);
  62. Member member2 = new Member(2, "mengdee2", "123456", 1, 22, "mengdee2@163.com");
  63. mongoTemplate.save(member2);
  64. Member member3 = new Member(3, "vbirdbest1", "123456", 2, 25, "vbirdbest1@126.com");
  65. mongoTemplate.save(member3);
  66. Member member4 = new Member(4, "vbirdbest2", "666666", 1, 26, "vbirdbest2@126.com");
  67. mongoTemplate.save(member4);
  68. Member member5 = new Member(5, "mengday1", "666666", 2, 28, "mengday1@163.com");
  69. mongoTemplate.save(member5);
  70. Member member6 = new Member(6, "mengday2", "888888", 1, 31, "mengday2@163.com");
  71. mongoTemplate.save(member6);
  72. Member member7 = new Member(7, "大法师", "888888", 2, 33, "mengdee11@163.com");
  73. mongoTemplate.save(member7);
  74. Member member8 = new Member(8, "小法海", "123456", 1, 35, "mengdee11@163.com");
  75. mongoTemplate.save(member8);
  76. }
  77. @Test
  78. public void testFind() {
  79. // findById
  80. Member member = mongoTemplate.findById(5, Member.class);
  81. System.out.println("findById: id=5: \n" + member);
  82. // where is
  83. Query query = new Query();
  84. query.addCriteria(Criteria.where("id").is(7));
  85. member = mongoTemplate.findOne(query, Member.class);
  86. System.out.println("\nfindOne id is 7 \n" + member);
  87. // 多条键查询 andOperator(相当于SQL中的 and并且)
  88. Criteria andCriatira = new Criteria();
  89. andCriatira.andOperator(Criteria.where("age").gte(31), Criteria.where("password").is("888888"));
  90. List<Member> result = mongoTemplate.find(new Query(andCriatira), Member.class);
  91. printMembers("where age >= 31 and password = 888888", result);
  92. // or
  93. Criteria orCriatira = new Criteria();
  94. orCriatira.orOperator(Criteria.where("id").in(2, 3, 4, 5), Criteria.where("sex").is(1));
  95. List<Member> result2 = mongoTemplate.find(new Query(orCriatira), Member.class);
  96. printMembers("id in (2, 3, 4) or sex = 1", result2);
  97. //*************************模糊查询 **************************
  98. // 左匹配 LIKE 'mengday%'
  99. Pattern pattern = Pattern.compile("^mengday.*$", Pattern.CASE_INSENSITIVE);
  100. Query regexQuery = new Query(Criteria.where("username").regex(pattern));
  101. List<Member> findList = mongoTemplate.find(regexQuery, Member.class);
  102. printMembers("^mengday.*$", findList);
  103. // 右匹配 LIKE '%@126.com'
  104. pattern = Pattern.compile("^.*@126.com$", Pattern.CASE_INSENSITIVE);
  105. regexQuery = new Query(Criteria.where("email").regex(pattern));
  106. findList = mongoTemplate.find(regexQuery, Member.class);
  107. printMembers("^.*@126.com$", findList);
  108. // 模糊匹配 LIKE '%法%'
  109. pattern = Pattern.compile("^.*法.*$", Pattern.CASE_INSENSITIVE);
  110. regexQuery = new Query(Criteria.where("username").regex(pattern));
  111. findList = mongoTemplate.find(regexQuery, Member.class);
  112. printMembers("^.*法.*$", findList);
  113. // 完全匹配 = 'mengdee111'
  114. pattern = Pattern.compile("^mengdee111$", Pattern.CASE_INSENSITIVE);
  115. regexQuery = new Query(Criteria.where("username").regex(pattern));
  116. findList = mongoTemplate.find(regexQuery, Member.class);
  117. printMembers("^mengdee111$", findList);
  118. // 分页
  119. int page = 1;
  120. int pageSize = 5;
  121. int offset = (page - 1) * pageSize;
  122. query = new Query();
  123. Sort sort = new Sort(Direction.DESC, "id");
  124. query.with(sort).skip(offset).limit(pageSize);
  125. List<Member> members = mongoTemplate.find(query, Member.class);
  126. printMembers("page limit 0, 5", members);
  127. // group
  128. System.out.println("\nwhere age > 18 group by password");
  129. GroupBy groupBy = GroupBy.key("password")
  130. .initialDocument("{'sum':0, 'count':0}")
  131. .reduceFunction("function (doc, prev){ prev.sum += doc.age; prev.count += 1; }");
  132. GroupByResults<Member> groupResult = mongoTemplate.group(Criteria.where("age").gt(18), "member", groupBy, Member.class);
  133. BasicDBList list = (BasicDBList)groupResult.getRawResults().get("retval");
  134. for (int i = 0; i < list.size(); i++) {
  135. BasicDBObject object = (BasicDBObject)list.get(i);
  136. System.out.println(object);
  137. }
  138. }
  139. @Test
  140. public void testUpdate() {
  141. List<Member> members = mongoTemplate.find(new Query(Criteria.where("id").in(1, 2, 3, 8)), Member.class);
  142. printMembers("update befor\n", members);
  143. Update update = new Update();
  144. update.set("password", "abcdef");
  145. update.inc("age", -1);
  146. mongoTemplate.updateMulti(new Query(Criteria.where("id").in(1, 2, 3, 8)), update, Member.class);
  147. members = mongoTemplate.find(new Query(Criteria.where("id").in(1, 2, 3, 8)), Member.class);
  148. printMembers("update after\n", members);
  149. }
  150. private void printMembers(String tips, List<Member> findList) {
  151. System.out.println("\n" + tips);
  152. for (Member member : findList) {
  153. System.out.println(member);
  154. }
  155. }
  156. }

测试结果:

  1. [member]
  2. total doc count:8
  3. findAll
  4. Member [id=1, username=mengdee111, password=123456, sex=1, age=17, email=mengdee111@163.com]
  5. Member [id=2, username=mengdee2, password=123456, sex=1, age=22, email=mengdee2@163.com]
  6. Member [id=3, username=vbirdbest1, password=123456, sex=2, age=25, email=vbirdbest1@126.com]
  7. Member [id=4, username=vbirdbest2, password=666666, sex=1, age=26, email=vbirdbest2@126.com]
  8. Member [id=5, username=mengday1, password=666666, sex=2, age=28, email=mengday1@163.com]
  9. Member [id=6, username=mengday2, password=888888, sex=1, age=31, email=mengday2@163.com]
  10. Member [id=7, username=大法师, password=888888, sex=2, age=33, email=mengdee11@163.com]
  11. Member [id=8, username=小法海, password=123456, sex=1, age=35, email=mengdee11@163.com]
  12. member collection isExists:true
  13. findById: id=5:
  14. Member [id=5, username=mengday1, password=666666, sex=2, age=28, email=mengday1@163.com]
  15. findOne id is 7
  16. Member [id=7, username=大法师, password=888888, sex=2, age=33, email=mengdee11@163.com]
  17. where age >= 31 and password = 888888
  18. Member [id=6, username=mengday2, password=888888, sex=1, age=31, email=mengday2@163.com]
  19. Member [id=7, username=大法师, password=888888, sex=2, age=33, email=mengdee11@163.com]
  20. id in (2, 3, 4) or sex = 1
  21. Member [id=1, username=mengdee111, password=123456, sex=1, age=17, email=mengdee111@163.com]
  22. Member [id=2, username=mengdee2, password=123456, sex=1, age=22, email=mengdee2@163.com]
  23. Member [id=3, username=vbirdbest1, password=123456, sex=2, age=25, email=vbirdbest1@126.com]
  24. Member [id=4, username=vbirdbest2, password=666666, sex=1, age=26, email=vbirdbest2@126.com]
  25. Member [id=5, username=mengday1, password=666666, sex=2, age=28, email=mengday1@163.com]
  26. Member [id=6, username=mengday2, password=888888, sex=1, age=31, email=mengday2@163.com]
  27. Member [id=8, username=小法海, password=123456, sex=1, age=35, email=mengdee11@163.com]
  28. ^mengday.*$
  29. Member [id=5, username=mengday1, password=666666, sex=2, age=28, email=mengday1@163.com]
  30. Member [id=6, username=mengday2, password=888888, sex=1, age=31, email=mengday2@163.com]
  31. ^.*@126.com$
  32. Member [id=3, username=vbirdbest1, password=123456, sex=2, age=25, email=vbirdbest1@126.com]
  33. Member [id=4, username=vbirdbest2, password=666666, sex=1, age=26, email=vbirdbest2@126.com]
  34. ^.*法.*$
  35. Member [id=7, username=大法师, password=888888, sex=2, age=33, email=mengdee11@163.com]
  36. Member [id=8, username=小法海, password=123456, sex=1, age=35, email=mengdee11@163.com]
  37. ^mengdee111$
  38. Member [id=1, username=mengdee111, password=123456, sex=1, age=17, email=mengdee111@163.com]
  39. page limit 0, 5
  40. Member [id=8, username=小法海, password=123456, sex=1, age=35, email=mengdee11@163.com]
  41. Member [id=7, username=大法师, password=888888, sex=2, age=33, email=mengdee11@163.com]
  42. Member [id=6, username=mengday2, password=888888, sex=1, age=31, email=mengday2@163.com]
  43. Member [id=5, username=mengday1, password=666666, sex=2, age=28, email=mengday1@163.com]
  44. Member [id=4, username=vbirdbest2, password=666666, sex=1, age=26, email=vbirdbest2@126.com]
  45. where age > 18 group by password
  46. { "password" : "123456" , "sum" : 82.0 , "count" : 3.0}
  47. { "password" : "666666" , "sum" : 54.0 , "count" : 2.0}
  48. { "password" : "888888" , "sum" : 64.0 , "count" : 2.0}

四:常用的类和常用的方法

Query

  1. public class Query {
  2. public static Query query(CriteriaDefinition criteriaDefinition);
  3. public Query(CriteriaDefinition criteriaDefinition);
  4. public Query addCriteria(CriteriaDefinition criteriaDefinition);
  5. public Query skip(int skip);
  6. public Query limit(int limit);
  7. public Query withHint(String name);
  8. public Query with(Pageable pageable);
  9. public Query with(Sort sort);
  10. }

Criteria

  1. public class Criteria implements CriteriaDefinition {
  2. public Criteria(String key);
  3. public static Criteria where(String key);
  4. public Criteria and(String key);
  5. public Criteria is(Object o);
  6. public Criteria ne(Object o);
  7. public Criteria lt(Object o);
  8. public Criteria lte(Object o);
  9. public Criteria gt(Object o);
  10. public Criteria gte(Object o);
  11. public Criteria in(Object... o);
  12. public Criteria nin(Object... o);
  13. public Criteria not();
  14. public Criteria regex(String re);
  15. public Criteria andOperator(Criteria... criteria);
  16. public Criteria orOperator(Criteria... criteria);
  17. public Criteria mod(Number value, Number remainder);
  18. public Criteria all(Object... o);
  19. public Criteria size(int s);
  20. public Criteria exists(boolean b);
  21. public Criteria type(int t);
  22. }

Update

  1. public class Update {
  2. public static Update update(String key, Object value);
  3. public Update set(String key, Object value);
  4. public Update inc(String key, Number inc);
  5. public Update push(String key, Object value);
  6. public Update pop(String key, Position pos);
  7. }

MongoTemplate

  1. public class MongoTemplate implements MongoOperations {
  2. String getCollectionName(Class<?> entityClass);
  3. <T> DBCollection createCollection(Class<T> entityClass);
  4. <T> DBCollection createCollection(Class<T> entityClass, CollectionOptions collectionOptions);
  5. DBCollection createCollection(String collectionName);
  6. DBCollection createCollection(String collectionName, CollectionOptions collectionOptions);
  7. Set<String> getCollectionNames();
  8. DBCollection getCollection(String collectionName);
  9. <T> boolean collectionExists(Class<T> entityClass);
  10. boolean collectionExists(String collectionName);
  11. <T> void dropCollection(Class<T> entityClass);
  12. void dropCollection(String collectionName);
  13. <T> List<T> findAll(Class<T> entityClass);
  14. <T> List<T> findAll(Class<T> entityClass, String collectionName);
  15. <T> GroupByResults<T> group(String inputCollectionName, GroupBy groupBy, Class<T> entityClass);
  16. <T> GroupByResults<T> group(Criteria criteria, String inputCollectionName, GroupBy groupBy, Class<T> entityClass);
  17. <O> AggregationResults<O> aggregate(TypedAggregation<?> aggregation, String collectionName, Class<O> outputType);
  18. <O> AggregationResults<O> aggregate(TypedAggregation<?> aggregation, Class<O> outputType);
  19. <O> AggregationResults<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType);
  20. <O> AggregationResults<O> aggregate(Aggregation aggregation, String collectionName, Class<O> outputType);
  21. <T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,
  22. Class<T> entityClass);
  23. <T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,
  24. MapReduceOptions mapReduceOptions, Class<T> entityClass);
  25. <T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, String mapFunction, String reduceFunction,
  26. Class<T> entityClass);
  27. <T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, String mapFunction, String reduceFunction,
  28. MapReduceOptions mapReduceOptions, Class<T> entityClass);
  29. <T> GeoResults<T> geoNear(NearQuery near, Class<T> entityClass);
  30. <T> GeoResults<T> geoNear(NearQuery near, Class<T> entityClass, String collectionName);
  31. <T> T findOne(Query query, Class<T> entityClass);
  32. <T> T findOne(Query query, Class<T> entityClass, String collectionName);
  33. boolean exists(Query query, String collectionName);
  34. boolean exists(Query query, Class<?> entityClass);
  35. boolean exists(Query query, Class<?> entityClass, String collectionName);
  36. <T> List<T> find(Query query, Class<T> entityClass);
  37. <T> List<T> find(Query query, Class<T> entityClass, String collectionName);
  38. <T> T findById(Object id, Class<T> entityClass);
  39. <T> T findById(Object id, Class<T> entityClass, String collectionName);
  40. <T> T findAndModify(Query query, Update update, Class<T> entityClass);
  41. <T> T findAndModify(Query query, Update update, Class<T> entityClass, String collectionName);
  42. <T> T findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> entityClass);
  43. <T> T findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> entityClass,
  44. String collectionName);
  45. <T> T findAndRemove(Query query, Class<T> entityClass);
  46. <T> T findAndRemove(Query query, Class<T> entityClass, String collectionName);
  47. long count(Query query, Class<?> entityClass);
  48. long count(Query query, String collectionName);
  49. long count(Query query, Class<?> entityClass, String collectionName);
  50. void insert(Object objectToSave);
  51. void insert(Object objectToSave, String collectionName);
  52. void insert(Collection<? extends Object> batchToSave, Class<?> entityClass);
  53. void insert(Collection<? extends Object> batchToSave, String collectionName);
  54. void insertAll(Collection<? extends Object> objectsToSave);
  55. void save(Object objectToSave);
  56. void save(Object objectToSave, String collectionName);
  57. WriteResult upsert(Query query, Update update, Class<?> entityClass);
  58. WriteResult upsert(Query query, Update update, String collectionName);
  59. WriteResult upsert(Query query, Update update, Class<?> entityClass, String collectionName);
  60. WriteResult updateFirst(Query query, Update update, Class<?> entityClass);
  61. WriteResult updateFirst(Query query, Update update, String collectionName);
  62. WriteResult updateFirst(Query query, Update update, Class<?> entityClass, String collectionName);
  63. WriteResult updateMulti(Query query, Update update, Class<?> entityClass);
  64. WriteResult updateMulti(Query query, Update update, String collectionName);
  65. WriteResult updateMulti(final Query query, final Update update, Class<?> entityClass, String collectionName);
  66. WriteResult remove(Object object);
  67. WriteResult remove(Object object, String collection);
  68. WriteResult remove(Query query, Class<?> entityClass);
  69. WriteResult remove(Query query, Class<?> entityClass, String collectionName);
  70. WriteResult remove(Query query, String collectionName);
  71. <T> List<T> findAllAndRemove(Query query, String collectionName);
  72. <T> List<T> findAllAndRemove(Query query, Class<T> entityClass);
  73. <T> List<T> findAllAndRemove(Query query, Class<T> entityClass, String collectionName);
  74. }

相关文章

http://www.what21.com/database/mongodb/mongodb-basis/java-query.html

相关文章