上一篇文章已经讲了如何去动态注入一个MongoTemplate,接下来我来给大家演示如何使用MongoTemplate完成常用的CRUD
公司之前用的是旧的mongoClient,不能直接操作对象,MongoTemplate正好弥补了这个不足,分享给大家
准备PO对象
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
* @author mr_h
* @createTime 2017/9/25
* @description //TODO
*/
@Document(collection = "collection_name")
public class UserPO {
@Indexed
@Field("user_id")
private Long userId;
@Field("username")
private String username;
@Field("password")
private String password;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
解释
- @Document 用来表明关联的mongo中的那个collection(类似于表名)
- @Indexed 为某个字段建立索引
- @Field 声明属性对应的数据库中的哪个字段
--------------------------------开始操作----------------------------------
插入数据
//插入一条
UserPO userPO = new UserPO();
userPO.setUserId(1L);
userPO.setUsername("username");
userPO.setPassword("password");
mongoTemplate.insert(userPO);
//插入多条
LinkedList<UserPO> pos = Lists.newLinkedList();
UserPO userPO = new UserPO();
userPO.setUserId(1L);
userPO.setUsername("username");
userPO.setPassword("password");
pos.add(userPO);//集合中可以放多个
mongoTemplate.insertAll(pos);
删除数据
可以看到有多种删除方法,我们在这里演示一个相对复杂的
Query query = new Query();
query.addCriteria(Criteria.where("user_id").is(1L));
mongoTemplate.findAndRemove(query,UserPO.class);
- Query是查询条件
更改数据
更改的API大概有这些
- updateMulti 如果根据查询条件找到对应的多条记录是,全部更新
- updateFirst 更改符合条件的第一个
- upsert 顾名思义 update+insert 如果根据条件没有对应的数据,则执行插入
- findAndModify 查询然后更新
接下来演示比较复杂的findAndModify
Query query = new Query();
query.addCriteria(Criteria.where("user_id").is(1L));
Update update = new Update();
update.set("username","the new username");
mongoTemplate.findAndModify(query,update,UserPO.class);
查询
其实看到这里 应该查询就不需要看了,因为上面大部分演示的都是先查询然后再去操作这条数据
Query query = new Query();
query.addCriteria(Criteria.where("user_id").is(1L));
List<UserPO> userPOS = mongoTemplate.find(query, UserPO.class);