一、前言
前面我們完成了SpringBoot在項目上對MongoDB的整合,包括
- 引入依賴
- 本地docker環境
- 處理使用者權限
下面将要完成一些增删改查的完整執行個體,友善以後直接調用。
二、MongoTemplate
增删改查是基于用MongoTemplate的調用,如下方式進行引入
import org.springframework.data.mongodb.core.MongoTemplate;
其中,Criteria的作用是組合查詢條件,源碼位置如下。
org/springframework/data/mongodb/core/query/Criteria.java
我們截取幾個方法,看下他是如何對條件進行拼接的。
/**
* Creates a criterion using the {@literal $lt} operator.
*
* @param value must not be {@literal null}.
* @return this.
* @see <a href="https://docs.mongodb.com/manual/reference/operator/query/lt/">MongoDB Query operator: $lt</a>
*/
public Criteria lt(Object value) {
criteria.put("$lt", value);
return this;
}
/**
* Creates a criterion using the {@literal $lte} operator.
*
* @param value must not be {@literal null}.
* @return this.
* @see <a href="https://docs.mongodb.com/manual/reference/operator/query/lte/">MongoDB Query operator: $lte</a>
*/
public Criteria lte(Object value) {
criteria.put("$lte", value);
return this;
}
/**
* Creates a criterion using the {@literal $size} operator.
*
* @param size
* @return this.
* @see <a href="https://docs.mongodb.com/manual/reference/operator/query/size/">MongoDB Query operator: $size</a>
*/
public Criteria size(int size) {
criteria.put("$size", size);
return this;
}
/**
* Creates a criterion using the {@literal $exists} operator.
*
* @param value
* @return this.
* @see <a href="https://docs.mongodb.com/manual/reference/operator/query/exists/">MongoDB Query operator: $exists</a>
*/
public Criteria exists(boolean value) {
criteria.put("$exists", value);
return this;
}
/**
* Creates a criterion using the {@literal $type} operator.
*
* @param typeNumber
* @return this.
* @see <a href="https://docs.mongodb.com/manual/reference/operator/query/type/">MongoDB Query operator: $type</a>
*/
public Criteria type(int typeNumber) {
criteria.put("$type", typeNumber);
return this;
}
我們可以看到,Criteria對MongoDB中的操作進行了封裝,并提供了重構方法,保證各種形式的傳參。
三、增删改查
1.新增
Cat cat = new Cat();
cat.setName("糖果");
cat.setAge(3);
cat.setLikeCount(100);
mongoTemplate.insert(cat);
2.删除
String id = "620a27c3db5ca321f4cc5754";
Criteria criteria = (new Criteria(entityClass.getDeclaredField("id").getName())).is(id);
//根據條件删除
Cat cat = mongoTemplate.findAndRemove(new Query(criteria), entityClass);
System.out.println(cat);
//直接删除
Cat cat2 = mongoTemplate.findById("620a27c3db5ca321f4cc5754", entityClass);
assert cat2 != null;
DeleteResult result = mongoTemplate.remove(cat2);
System.out.println(result);
//findAllAndRemove 和 findAndRemove 的差別在于,前者删除全部比對的資料,後者隻删除一個
3. 查找
//查詢全部
List<Cat> cats = mongoTemplate.findAll(entityClass);
System.out.println(cats);
//根據條件查詢
Criteria criteria = (new Criteria(entityClass.getDeclaredField("likeCount").getName())).is(cats.get(0).getLikeCount());
List<Cat> cats2 = mongoTemplate.find(new Query(criteria), entityClass);
System.out.println(cats2);
//根據ID查詢
Cat cat = mongoTemplate.findById(cats.get(1).getId(), entityClass);
System.out.println(cat);
//查詢單條記錄
Criteria criteria2 = (new Criteria(entityClass.getDeclaredField("name").getName())).is(cats.get(0).getName());
Cat cat2 = mongoTemplate.findOne(new Query(criteria2), entityClass);
System.out.println(cat2);
4. 更新
String id = "620b1b46d6e42202392f5653";
Criteria criteria = (new Criteria(entityClass.getDeclaredField("id").getName())).is(id);
Update update = new Update();
update.set(entityClass.getDeclaredField("name").getName(), "炸醬233");
update.inc("likeCount");
//單條更新
UpdateResult updateResult = mongoTemplate.updateFirst(new Query(criteria), update, entityClass);
System.out.println(updateResult);
Criteria criteria2 = (new Criteria(entityClass.getDeclaredField("age").getName())).is(3);
Update update2 = new Update();
update2.set(entityClass.getDeclaredField("name").getName(), "炸醬");
update2.inc("age");
//批量更新
UpdateResult updateResult2 = mongoTemplate.updateMulti(new Query(criteria2), update2, entityClass);
System.out.println(updateResult2);
5. 其他
//擷取集合名稱
String collectionName = mongoTemplate.getCollectionName(entityClass);
System.out.println(collectionName);
//判斷集合是不是存在 false
boolean check = mongoTemplate.collectionExists("dog");
System.out.println(check);
//判斷集合是不是存在 true
boolean checkCat = mongoTemplate.collectionExists("cat");
System.out.println(checkCat);
//建立集合
mongoTemplate.createCollection("bug2");
//删除集合
mongoTemplate.dropCollection("bug2");
四、總結
五、源碼位址