MongoDB作为查询性能优越的Nosql数据库在项目中运用越来越多,逐渐变成主要的数据库。
下面,在SpringBoot项目中引入MongoDB,使用MongoTemplate作为工具。
前提当然是在本地搭建起Mongo服务,导入Maven节点。
org.springframework.boot
spring-boot-starter-data-mongodb
com.spring4all
mongodb-plus-spring-boot-starter
1.0.0.RELEASE
org.mongodb
mongo-java-driver
3.8.1
yml中配置数据库 ,mongo默认端口号27017。
data:
mongodb:
uri: mongodb://localhost:27017/zs
注意:@Data是lombok工具包的,JSONObject是hutool工具包的
我模拟的是,点击加钱,生成记录的场景,里面的类型最好是用包装类。
@Data
@Document(collection="AddMoney")
public class AddMoney implements Serializable {
String id;
Integer type;
Double money;
String creattime;
}
已经配置过,直接依赖注入。
@Repository
public class AddMoneyDao {
/**
* MongoTemplate
*/
@Autowired
private MongoTemplate mongoTemplate;
}
增加一条数据,id自动生成,返回一个有id的对象。
/*
* 增加一条数据
*/
public AddMoney saveOne(AddMoney param) {
return mongoTemplate.insert(param);
}
查询操作,Query类型为筛选条件,在查询修改和删除中通用,Criteria是拼接条件,where().is(),也可以是其他的lt、lte、gt、gte、ne等等。
排序或者限制输出行数这些与where无关的在Query里设置q.limit()、q.skip()、q.with(Sort.by(Sort.Order.desc(sname)));
/*
* 根据id查询
*/
public AddMoney findOneById(String id){
Query q=new Query( Criteria.where("_id").is(id));
List list = mongoTemplate.find(q, AddMoney.class);
if(list.size()==1){
return list.get(0);
}else
return null;
}
/*
* 查询全部
*/
public List findAll() {
return mongoTemplate.findAll(AddMoney.class);
}
/*
* 查询全部并排序
*/
public List findAllSort(String sname) {
Query q=new Query();
q.with(Sort.by(Sort.Order.desc(sname)));
return mongoTemplate.find(q, AddMoney.class);
}
修改数据入参由修改内容和条件筛选组成,Update对象中设置修改内容,筛选条件和查询一样,返回值为改变列数等信息。
注意入参的修改对象属性为null就是对应字段不修改,不为null就是修改为入参的值,所以要用包装类,否则int double这些默认为0。
/*
* 根据id修改数据
*/
public String updateById(AddMoney params,String id){
JSONObject json= JSONUtil.parseObj(params);
Query q=new Query(Criteria.where("_id").is(id));
Update update = new Update();
json.forEach((s, o) -> {
update.set(s,o);
});
UpdateResult result=mongoTemplate.updateFirst(q,update,params.getClass());
return result.toString();
}
/*
* 修改多个
*/
public String update(AddMoney params,int type){
JSONObject json= JSONUtil.parseObj(params);
Query q=new Query(Criteria.where("type").is(type));
Update update = new Update();
json.forEach((s, o) -> {
update.set(s,o);
});
UpdateResult result=mongoTemplate.updateMulti(q,update,AddMoney.class);
return result.toString();
}
删除数据,返回值为删除行数
/*
* 按id删除
*/
public String deleteById(String id){
Query q=new Query(Criteria.where("_id").is(id));
DeleteResult deleteResult=mongoTemplate.remove(q,AddMoney.class);
return deleteResult.toString();
}
写完调用测试一下
@Service
public class UserServiceImpl implements UserService {
@Autowired
AddMoneyDao plusMoneyDao;
@Override
public AddMoney findOneById(String id) {
return plusMoneyDao.findOneById(id);
}
@Override
public String updateOne(AddMoney a,String id) {
return plusMoneyDao.updateById(a,id);
}
@Override
public String updateByType(AddMoney a, int type) {
return plusMoneyDao.update(a,type);
}
@Override
public String deleteOne(String id) {
return plusMoneyDao.deleteById(id);
}
@Override
public List findAll() {
return plusMoneyDao.findAllSort("money");
}
@Override
public AddMoney saveOne(AddMoney addMoney) {
return plusMoneyDao.saveOne(addMoney);
}
}