Spring Boot之搞定mongoTemplate的知识小结
最近开发一些MongoDB+SpringBoot的项目,发现相较于MyBatis来说,SpringBoot对于MongoDB进行操作变化更多,所以总结一下使用mongoTemplate库的知识点,以备以后查阅方便。
首先在项目中的pom.xml配置文件中添加如下依赖:
org.springframework.boot spring-boot-starter-data-mongodb
在需要引入mongoTemplate对象的Service文件中添加该对象即可,如下所示:
publicclassJobService{
//引入mongoTemplate对象
@Autowired
MongoTemplatemongoTemplate;
针对CURD操作,常用的API方法有如下4类:
- 更新:save()。
- 查询:findAll()、find()、findOne()。
- 更新操作:update()。
- 删除操作:remove()。
下面以一个实际的CRUD例子来讲解具体用法,在注释中会给出语法。
先还是创建一个数据类,假设我们是对武侠剑客数据进行操作,POJO对象的定义代码如下所示。
/**
*武侠剑客类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection="my_sworders")
publicclassMySworderimplementsSerializable{
//剑客的ID
@Id
privateStringid;
//姓名
@Field
privateStringname;
//生平描述
@Field
privateStringdescription;
//绝招
@Field
privateStringskill;
//创建时间
@Field
privateintcreated;
}
其中特别注意的是,@Document是mongodb驱动库提供设置操作的文档集合名称的注解,这里设置集合为my_sworders。
然后针对这个剑客类编写一个Service文件,命名为SworderService.java:
@Service
publicclassSworderService{
@Autowired
MongoTemplatemongoTemplate;
/**
*添加一个剑客
*@parammySworder
*@return
*/
publicbooleanadd(MySwordermySworder){
longunixTime=System.currentTimeMillis()/1000L;
intnowUnixTime=(int)unixTime;
mySworder.setCreated(nowUnixTime);
/**
*语法:TmongoTemplate.save(TobjectToSave)
*save方法用于保存数据对象,传递定义好的JavaBean即可,被保存的数据对象会作为返回值被返回。
*类似地,使用insert也可以达到保存数据的作用。
*/
MySworderobj=mongoTemplate.save(mySworder);
if(obj.getId()>0){
returntrue;
}else{
returnfalse;
}
}
/**
*获取所有剑客数据
*@return
*/
publicListfindAll(){
/**
*语法:ListfindAll(ClassentityClass)
*finAll会返回所有entityClass对应的数据集合的数据,相当于MySQL中select*fromxxx_table_name。
*/
returnmongoTemplate.findAll(MySworder.class);
}
publicbooleanupdate(MySwordermySworder){
//创建查询对象
Queryquery=Query.query(Criteria.where("id").is(mySworder.getId()));
Updateupdate=newUpdate();
update.set("name",mySworder.getName());
update.set("description",mySworder.getDescription());
update.set("skill",mySworder.getSkill());
/**
*语法:publicUpdateResultupdateFirst(Queryquery,UpdateDefinitionupdate,Class>entityClass)
*updateFirst用于更新第一个被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
*/
UpdateResultupdateResult=mongoTemplate.updateFirst(query,update,MyArticle.class);
if(updateResult.getModifiedCount()>0){
returntrue;
}else{
returnfalse;
}
}
publicbooleanupdateBatchByKeyWords(StringsearchKey,StringreplaceString){
//创建模糊查询对象
Patternpattern=Pattern.compile("^.*"+searchKey+".*$",Pattern.CASE_INSENSITIVE);
Criteriacriteria=Criteria.where("description").regex(pattern);
Updateupdate=newUpdate();
update.set("description",replaceString);
Queryquery=newQuery();
query.addCriteria(criteria);
/**
*语法:publicUpdateResultupdateMulti(Queryquery,UpdateDefinitionupdate,Class>entityClass)
*updateMulti用于所有被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
*/
UpdateResultupdateResult=mongoTemplate.updateMulti(query,update,MySworder.class);
if(updateResult.getModifiedCount()>0){
returntrue;
}else{
returnfalse;
}
}
publicbooleandelete(Stringid){
MySwordermySworder=newMySworder();
mySworder.setId(id);
/**
*语法:DeleteResultremove(Objectobject)
*该方法用于删除数据,一般都是传递一个主键ID即可
*/
DeleteResultdeleteResult=mongoTemplate.remove(mySworder);
if(deleteResult.getDeletedCount()>0){
returntrue;
}else{
returnfalse;
}
}
publicMySworderdetails(Stringid){
Queryquery=Query.query(Criteria.where("id").is(id));
/**
*TfindOne(Queryquery,ClassentityClass)
*
*findOne就是根据查询条件(query)获取一条数据。
*/
returnmongoTemplate.findOne(query,MySworder.class);
}
}
其中模糊查询是使用了regex方法,并使用匹配Pattern对象来保存需要被匹配的字符串。
如果是多条件查询,则需要使用Query对象来保存多个查询条件,具体代码如下:
//用于存储条件对象
Queryquery=newQuery();
CriterianameCriteria=Criteria.where("name").is(loginUser.getName());
CriteriapasswordCriteria=Criteria.where("password").is(loginUser.getPassword());
query.addCriteria(nameCriteria);
query.addCriteria(passwordCriteria);
MyUserhasUser=mongoTemplate.findOne(query,MyUser.class);
IntegeruserId=hasUser.getId();
如果查询条件很多,那么这个addCriteria的代码段就会很长,这个时候就考虑自己再封装一个工具类,把循环查询条件和一些复杂查询的过程给封装成一个方法,这样事半功倍。
到此这篇关于SpringBoot之搞定mongoTemplate的知识小结的文章就介绍到这了,更多相关SpringBoot搞定mongoTemplate内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。