本文是springboot结合SpringBoot starter-data-mongodb 进行增删改查 快速入门教程
一、准备
请参考以下几篇文章
二、添加依赖
在POM 中添加如下依赖
org.springframework.boot
spring-boot-starter-data-mongodb
三、配置文件
在配置文件 application.yml 添加如下配置
spring:
data:
mongodb:
#单机配置
host: 192.168.1.1:27017
#指定操作的数据库
#authenticationDatabase: admin
username: admin
password: 123456
# 多个IP集群的配置:
# uri://admin:[email protected]:20000,192.168.252.122:20000,192.168.252.12:20000/demo
四、实体类配置
实体映射是通过MongoMappingConverter这个类实现的。它可以通过注释把java类转换为mongodb的文档。
有以下几种注释:
@Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。
@Document - 声明此类为mongodb的文档实体类,通过collection参数指定这个类对应的文档名称。@Document(collection=”mongodb”) mongodb对应表
@Indexed - 声明该字段需要索引,建索引可以大大的提高查询效率。
@CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
@Transient - 映射忽略的字段,该字段不会保存到mongodb。
@PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据
@Data
@Document(collection = "demo_entity_collection")
public class DemoEntity implements Serializable {
@Id
private Long id;
@Field("title")
private String title;
@Field("description")
private String description;
@Field("by")
private String by;
@Field("url")
private String url;
}
五、使用用例
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public class AppTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 添加数据
*/
@Test
public void saveDemoTest() {
DemoEntity demoEntity = new DemoEntity();
demoEntity.setId(1L);
demoEntity.setTitle("Spring Boot 中使用 MongoDB");
demoEntity.setDescription("关注公众号,小罗技术笔记,专注于开发技术的研究与知识分享");
demoEntity.setBy("xiaoluo");
demoEntity.setUrl("http://www.yuwowugua.com");
mongoTemplate.save(demoEntity);
// mongoTemplate.insert(demoEntity);
}
/**
* 删除数据
*/
@Test
public void removeDemoTest() {
//通过id 删除
mongoTemplate.remove(2L);
//通过其它唯一标识值删除
Query queryDelete = new Query().addCriteria(Criteria.where("caseCode").is("1314235246"));
mongoTemplate.remove(queryDelete,DemoMapEntity.class);
}
/**
* 更新数据
*/
@Test
public void updateDemoTest() {
DemoEntity demoEntity = new DemoEntity();
demoEntity.setId(1L);
demoEntity.setTitle("Spring Boot 中使用 MongoDB 更新数据");
demoEntity.setDescription("关注公众号,小罗技术笔记,专注于开发技术的研究与知识分享");
demoEntity.setBy("xiaoluo");
demoEntity.setUrl("http://www.yuwowugua.com");
Query query = new Query(Criteria.where("id").is(demoEntity.getId()));
Update update = new Update();
update.set("title", demoEntity.getTitle());
update.set("description", demoEntity.getDescription());
update.set("by", demoEntity.getBy());
update.set("url", demoEntity.getUrl());
mongoTemplate.updateFirst(query, update, DemoEntity.class);
}
/**
* 查询数据
*/
@Test
public void findDemoByIdTest() {
Query query = new Query(Criteria.where("id").is(1L));
DemoEntity demoEntity = mongoTemplate.findOne(query, DemoEntity.class);
System.out.println(JSONObject.toJSONString(demoEntity));
}
/**
* map集合追加数据
*/
@Test
public void pushMapDemo() {
DemoMapEntity demoMapEntity = new DemoMapEntity();
demoMapEntity.setCaseCode("1314235246");
Map> map = new HashMap<>();
List list = new ArrayList<>();
list.add("1");
list.add("2");
map.put("data.valuation", list);
demoMapEntity.setData(map);
mongoTemplate.save(demoMapEntity);
Update update = new Update();
List list2 = new ArrayList<>();
list2.add("3");
list2.add("4");
update.push("data.valuation", list2);
Query queryUpdate = new Query().addCriteria(Criteria.where("caseCode").is(demoMapEntity.getCaseCode()));
mongoTemplate.updateFirst(queryUpdate, update, DemoMapEntity.class);
}
}
六、源码下载