Mongodb在Springboot中的使用:
项目地址:https://github.com/ZiXinZhu/mongodb
1. 在pom.xml中添加MongoDB依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2. 配置application.properties的Mongodb连接池
spring.data.mongodb.host=123.207.231.***
spring.data.mongodb.port=27017
spring.data.mongodb.database=local
3. service类
private static final String collectionName="userPO";
private static final String collectionName_rolePO="rolePO";
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private EntityConfig entityConfig;
/**
* 【新增】文档如果主键id被占用会抛出异常
* @return
*/
public RolePO insert(){
return mongoTemplate.insert(entityConfig.getRolePO());
}
/**
* 向【指定数据库】新增文档数据
* @return
*/
public UserPO insertToDatabases(){
return mongoTemplate.insert(entityConfig.getUserPO_one(),collectionName);
}
/**
* 【批量】新增文档到指定数据库
* @return
*/
public Collection<RolePO> insertForeach(){
return mongoTemplate.insert(entityConfig.getList(),collectionName_rolePO);
}
/**
* 保存文档如果主键id被占用会【覆盖】旧的文档(save无法做批量保存)
* @return
*/
public RolePO save(){
return mongoTemplate.save(entityConfig.getRolePO_one());
}
/**
* 保存文档数据向【指定数据库】
* @return
*/
public UserPO saveToDatabases(){
return mongoTemplate.save(entityConfig.getUserPO_one(),collectionName);
}
/**
* 删除符合条件的所有数据
* @return
*/
public long delete() {
Query query = new Query(Criteria.where("username").is("qq"));
DeleteResult result = mongoTemplate.remove(query, UserPO.class);
long count = result.getDeletedCount();
return count;
}
/**
* 通过内嵌数据删除符合条件的所有数据
* @return
*/
public long deleteContent() {
Query query = new Query(Criteria.where("roles.roleName").is("老师"));
DeleteResult result = mongoTemplate.remove(query, UserPO.class);
long count = result.getDeletedCount();
return count;
}
/*
* 修改【第一条】符合条件的文档
* @return
*/
public long updateOne(){
Query query= Query.query(Criteria.where("username").is(("zzx")));
Update update=Update.update("password","654321");
return mongoTemplate.updateFirst(query,update, UserPO.class).getModifiedCount();
}
/**
* 修改符合内嵌数据条件的文档【批量修改】
* @return
*/
public long updateMulti(){
Query query= Query.query(Criteria.where("roles.roleName").is(("程序员")));
Update update=Update.update("password","654321").set("time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
return mongoTemplate.updateMulti(query,update, UserPO.class,collectionName).getModifiedCount();
}
/**
* 修改第一条符合条件的文档并返回修改前的文档【原子操作】
* @return
*/
public UserPO findAndModify(){
Query query= Query.query(Criteria.where("roles.roleName").is(("程序员")));
Update update=Update.update("password","123456");
return mongoTemplate.findAndModify(query,update, UserPO.class,collectionName);
}
/**
* 查找符合要求的【所有】数据并返回
* @return
*/
public List<UserPO> select(){
Query query=Query.query(Criteria.where("roles.roleName").is("程序员"));
return mongoTemplate.find(query,UserPO.class,collectionName);
}
/**
* 查找符合要求的【第一条】数据并返回
* @return
*/
public UserPO selectOne(){
Query query=Query.query(Criteria.where("roles.roleName").is("程序员"));
return mongoTemplate.findOne(query,UserPO.class,collectionName);
}
/**
* 按照时间从小到大【排序】返回
* @return
*/
public List<UserPO> selectSort() {
Sort sort = Sort.by(Sort.Direction.ASC, "time");
String time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()-24*60*60*1000);
return mongoTemplate.find(Query.query(Criteria.where("time").lt(time)).with(sort), UserPO.class);
}
/**
* 按照时间从小到大排序【分页】返回
* @return
*/
public List<UserPO> selectPage() {
//分页查询(第1页每页2行)
Sort sort = Sort.by(Sort.Direction.ASC, "time");
Pageable pageable =PageRequest.of(0,2);
String time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()-24*60*60*1000);
return mongoTemplate.find(Query.query(Criteria.where("time").lt(time)).with(pageable).with(sort), UserPO.class);
}