本文是基于使用Spring data MongoDB中的Mongotemplate来进行操作的,因为Mongotemplate集成了许多内置的方法来操作mongoDB数据库,使用起来比较简单易懂,尤其是使用到SpringBoot框架来搭建项目的,值得大家来学习一下。
本文包括也涉及到一些新手比较常用的功能在里面,如多条件查询、批量删除、插入多个数据等等,也使用到比较常用的写法,欢迎大家来学习。
笔者会尽量在所有的代码中都添加上注释和说明,如果还有遇到什么问题的话,可以在评论区留言,笔者看到消息时定会马上回复。话不多说,下面开始进入我们的主题。
应用到方法有:
①mongotemplate.insert(title,“Title”);//插入单个数据
②mongotemplate.save(list,“Title”);//插入多个数据
(1)通过insert方法
①插入一条记录
//insert()方法的第一个参数为插入的实体类数据对象,第二个参数是数据集的名称,即mysql中的数据表。
Title t = new Title();
//为t对象赋值
t.setTname(“张三”);
mongotemplate.insert(title,"Title");
②插入多条记录
思路也很简单,就是把实体类的对象添加到泛型集合list中,然后把list填写到第一个参数即可
//样例代码,仅供参考
String [] data = {"张三","李四"};
//此处使用泛型list集合,
List<Title> list = new ArrayList<Title>();
//data.length是data数组的长度,是最基本的
for(int i = 0 ; i < data.length ; i++){
//实体类的对象定义
Title t = new Title();
//为t对象赋值
t.setTname(data[i]);
//把t对象添加到list列表中
list.add(t);
}
//把list对象传入到第一参数中
mongoTemplate.insert(list, "Title");
(2)通过save方法
其使用方法与insert方法一样,只要把insert换成save即可,此处就不作详解。
值得注意的是,insert()在插入数据的时候会区分系统默认生成_id值,一旦遇到重复的_id值,系统会抛出异常;
save()方法在插入数据遇到相同_id值时,并不会出现异常,而是在原有的基础上对该记录的信息进行更新操作。
应用到方法有:
①remove(query, Title.class);//包括单个删除和批量删除,只需要对query语句进行编写即可
(1)单个删除
//Criteria类可以用于编写特定的执行条件,与Query对象进行组合使用
Criteria criatira = new Criteria();
//使用criatira对象去调用andOperator()来编写具体具体条件;
//**单个条件**的编写方式为:Criteria.where("id").is(id);
//如果是**多个条件**,则Criteria.where("id").is(id)**,and("name").is(name)**;
criatira.andOperator(Criteria.where("id").is(id));//假设is(id)中的id是从前端获取过来的变量。
//再把criatira对象传入query对象即可
Query query = new Query(criatira);
//调用
mongoTemplate.remove(query, Title.class);
(2)批量删除
//假设前端提交过来的变量litleSno为:123,234,345.....等,
//首先可以把litleSno字符串分割为数组
String[] strs = litleSno.split(",");
//
criatira = new Criteria();
/*
* Criteria.where("id").in(sentenceIdTemp)中的
* 参数sentenceIdTemp必须是Object,否则出现警告
*/
Object[] sentenceIdTemp = strs;
// 建立批量删除的条件时,是使用in(),而不是is();
//此时是传入一个数组即可
criatira.andOperator(Criteria.where("id").in(sentenceIdTemp));
//以下步骤与单个删除一样
Query query = new Query(criatira);
mongoTemplate.remove(query, Title.class);
应用到方法有:
①mongoTemplate.findAll(Title.class);//全查询
②mongoTemplate.find(query,Title.class);//条件查询
③mongoTemplate.find(query,Title.class);//模糊查询
查询功能与上述的删除功能有点类似,主要都是通过建立criatira和query对象来构造条件,当然,如果需要进行全查询时,只需要在query对象中不构造条件即可,或者使用mongotemplate里面集成的findAll()方法,具体写法请看以下代码:
①全查询
//此处使用到findAll()方法,只需要传入一个实体类即可
List<Title> titleList = mongoTemplate.findAll(Title.class);
②条件查询
//同理,直接新建criatira对象,用于编写特定的查询条件
Criteria criatira = new Criteria();
//如果需要多条件查询,也可以参照上述删除功能的写法即可
criatira.andOperator(Criteria.where("id").is(id));
Query query = new Query(criatira);
//此处使用的是find()方法
mongoTemplate.find(query,Title.class);
③模糊查询
//同理,直接新建criatira对象,用于编写特定的查询条件
Criteria criatira = new Criteria();
//value变量为模糊查询提交过来的值,类似SQL语句中的%value%的写法
//需要定义一个模式对象来构造模糊字段
Pattern pattern1 = Pattern.compile("^.*" + value + ".*$",Pattern.CASE_INSENSITIVE);
//此处是用where().regex(),而不是where().is()。
criatira.andOperator(Criteria.where("需要模糊查询的字段").regex(pattern1));
//或者还有其他的写法,比如搭配结合Example和Criteria对象进行使用,此处就不作过多解释,需要的话可以在评论区留言
//其余的写法一样
Query query = new Query(criatira);
mongoTemplate.find(query,Title.class);
如果需要多个模糊条件进行查询,需要修改的地方只有以下两个地方:
//第一个模糊条件
Pattern pattern1 = Pattern.compile("^.*" + value1 + ".*$",Pattern.CASE_INSENSITIVE);
//第二个模糊条件
Pattern pattern2 = Pattern.compile("^.*" + value2 + ".*$",Pattern.CASE_INSENSITIVE);
//如果还需要,可以在andOperator()方法中继续添加Criteria.where("需要模糊查询的字段").regex(pattern1),并且用“,”隔开就行。
criatira.andOperator(Criteria.where("需要模糊查询的字段").regex(pattern1),Criteria.where("需要模糊查询的字段").regex(pattern2));
应用带的方法:
①mongoTemplate.upsert(query, update, Title.class, “Title”);
①更新单个字段
/*
*query对象为查询条件对象,即根据某个条件查询到特定的数据
*update 对象为更新数据对象,即封装需要修改的字段及内容
*/
Query query = new Query();
//假设前端已经提交到title数据,即可通过title进行相应数据的获取
//为了省略Criteria对象的写法,此处可以直接利用query对象来调用addCriteria()来编写条件就行
query.addCriteria(Criteria.where("id").is(id);
Update update = new Update();
//set("字段名","需要修改的值");
update.set("name", title.getName());
//在数据库中进行查询,如果有满足query对象的数据,则按照update的数据进行更新操作,否则,就直接插入一条新的数据。
mongoTemplate.upsert(query, update, Title.class, "Title");
②更新多个字段
Query query = new Query();
query.addCriteria(Criteria.where("id").is(id);
Update update = new Update();
update.set("name", title.getName());
update.set("description", title.getDescription());
//........
/**
* 数据库有,就新增, 没有,就修改
*/
mongoTemplate.upsert(query, update, Title.class, "Title");
以上是我对于自己在实际应用开发中使用的到代码编写汇总,其中也是参考网上各种各样的方法来操作的,最终形成自己的编写方式。对于新手来说,我个人觉得以上的写法是比较好懂的。如果读者们在查阅时有发什么错误或者疑问时,欢迎在评论区进行留言。谢谢