# my-spring-data-mongo **Repository Path**: yankj12/my-spring-data-mongo ## Basic Information - **Project Name**: my-spring-data-mongo - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-10-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # my-spring-data-mongo 用于学习spring-data-mongo *** ## 环境 ### MongoDB 版本 ``` use admin; db.version(); 3.4.9 ``` ## Spring Data MongoDB参考教程 - [Introduction to Spring Data MongoDB](https://www.baeldung.com/spring-data-mongodb-tutorial) 为主 - [CSDN Spring Data MongoDB](https://blog.csdn.net/column/details/15996.html) 为辅 - [Spring Data MongoDB Doc](https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/) ### MongoTemplate Save–Update ``` @Test public void saveUpdate(){ User user = mongoTemplate.findOne(Query.query(Criteria.where("name").is("jim")), User.class); user.setName("Jim"); mongoTemplate.save(user, "user"); } ``` User类必须有id属性,否则只会新增,不能修改 报如下错 ``` java.lang.NoSuchMethodError: com.mongodb.client.MongoCollection.replaceOne(Lorg/bson/conversions/Bson;Ljava/lang/Object;Lcom/mongodb/client/model/ReplaceOptions;)Lcom/mongodb/client/result/UpdateResult; at org.springframework.data.mongodb.core.MongoTemplate$7.doInCollection(MongoTemplate.java:1476) at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:535) at org.springframework.data.mongodb.core.MongoTemplate.saveDocument(MongoTemplate.java:1461) at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1396) at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:1344) at com.yan.mongo.demo2.MongoTemplateTest.saveUpdate(MongoTemplateTest.java:49) ``` 查阅资料[java.lang.NoSuchMethodError: mongodb版本冲突](https://blog.csdn.net/weixin_36586564/article/details/79708115) >图中spring版本与spring-data-mongodb版本之间的关系为问题的关键。\ 之前spring为4.0.6 spring-data-mongodb为2.0.5.RELEASE 版本 兼容有问题\ 后改为spring4.0.6 spring-data-mongodb为1.7.2.RELEASE版本就解决了。 在pom文件中注释掉如下内容,同时保证spring版本与spring-data-mongodb版本一致,可以解决 ``` ``` 需要注意: 框架中默认将User.class映射的collection为首字母小写的'user',如果你在写入的时候写入到了'User'中,那么使用默认的Query.query(Criteria.where("name").is("jim"))是查询不到的。 默认的Query.query(Criteria.where("name").is("jim"))查询的是'user' 可以使用@Document注解指定collection ``` @Document(collection="newyork") public class Venue { ``` ## Junit+Spring ### 样例 ``` import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.yan.mongo.MongoConfig; import com.yan.mongo.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { MongoConfig.class }) public class MongoTemplateTest{ @Autowired MongoTemplate mongoTemplate; @Test public void savesUserCorrectly() { User user = new User(); user.setName("jim"); mongoTemplate.save(user, "User"); } } ``` 解释下用到的注解: @RunWith:用于指定junit运行环境,是junit提供给其他框架测试环境接口扩展, 为了便于使用spring的依赖注入,spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner作为Junit测试环境 ### 添加的依赖 需要spring-test的依赖,可以添加spring-boot-starter-test 依赖 ``` org.springframework.boot spring-boot-starter-test 2.0.6.RELEASE test ``` ### 参考 - [SpringBoot junit单元测试](https://blog.csdn.net/congge_1993/article/details/73187903) - [Spring整合Junit4进行单元测试](https://blog.csdn.net/qq_32786873/article/details/56480880)