購買域名需要注意什么seo關(guān)鍵詞選取工具
【MongoDB】SpringBoot整合MongoDB
文章目錄
- 【MongoDB】SpringBoot整合MongoDB
- 0. 準(zhǔn)備工作
- 1. 集合操作
- 1.1 創(chuàng)建集合
- 1.2 刪除集合
- 2. 相關(guān)注解
- 3. 文檔操作
- 3.1 添加文檔
- 3.2 批量添加文檔
- 3.3 查詢文檔
- 3.3.1 查詢所有文檔
- 3.3.2 根據(jù)id查詢
- 3.3.3 等值查詢
- 3.3.4 范圍查詢
- 3.3.5 and查詢
- 3.3.6 or查詢
- 3.3.7 and or 查詢
- 3.3.8 排序
- 3.3.9 分頁查詢
- 3.3.10 查詢總條數(shù)
- 3.3.11 去重
- 3.3.12 json字符串查詢
- 3.4 修改文檔
- 3.4.1 更新單條文檔
- 3.4.2 批量更新文檔
- 3.4.3 修改或插入文檔
- 3.5 刪除文檔
- 3.5.1 刪除所有文檔
- 3.5.2 條件刪除
0. 準(zhǔn)備工作
引入依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
1. 集合操作
1.1 創(chuàng)建集合
創(chuàng)建一個 ”products“ 集合,如果不存在則創(chuàng)建,存在則不創(chuàng)建。
@Test
public void createCollection() {//不存在集合則創(chuàng)建if (!mongoTemplate.collectionExists("products")) {mongoTemplate.createCollection("products");}
}
1.2 刪除集合
@Test
public void dropCollection() {mongoTemplate.dropCollection("products");
}
2. 相關(guān)注解
@Document
- 修飾范圍:用在類上
- 作用:用來映射這個類的一個對象為 mongo 中一條文檔數(shù)據(jù)
- 屬性:{value、collection} 用來指定操作的集合名稱
@Id
- 修飾范圍:用在成員變量、方法上
- 作用:用來將成員變量的值映射為文檔的
_id
的值
@Field
- 修飾范圍:用在成員變量、方法上
- 作用:用來將成員變量以及值映射為文檔中一個 key,value 對
- 屬性:{name,value} 用來指定在文檔中key的名稱,默認(rèn)為成員變量名
@Transient
- 修飾范圍:用在成員變量、方法上
- 作用:用來指定某個成員變量不參與文檔的序列化
3. 文檔操作
首先創(chuàng)建一個 User 類,給它一些基本屬性。
@Data
@AllArgsConstructor
@NoArgsConstructor
//表示類實例代表mongo中一條文檔
@Document("users")
public class User {private Integer id;private String name;private Double salary;private Date birthday;
}
3.1 添加文檔
向 users 集合中添加文檔:
@Test
public void saveDocument() {User user = new User(1, "zhj", 25000.0, new Date());//mongoTemplate.save(user);mongoTemplate.insert(user);
}
- insert():插入重復(fù)數(shù)據(jù)時,該方法會報異常提示主鍵重復(fù)。
- save():對已經(jīng)存在的數(shù)據(jù)進(jìn)行更新。它的功能就是 saveOrUpdate
3.2 批量添加文檔
@Test
public void batchSaveDocument() {List<User> users = Arrays.asList(new User(3, "張三", 25000.0, new Date()), new User(4, "李四", 25000.0, new Date()));mongoTemplate.insert(users,User.class);
}
批量添加建議使用 insert()
方法,可以一次性插入整個數(shù)據(jù),效率更高。
3.3 查詢文檔
3.3.1 查詢所有文檔
List<User> users = mongoTemplate.findAll(User.class);
//List<User> users1 = mongoTemplate.findAll(User.class, "users");
3.3.2 根據(jù)id查詢
User user = mongoTemplate.findById(1, User.class);
3.3.3 等值查詢
List<User> users1 = mongoTemplate.find(Query.query(Criteria.where("name").is("zs")), User.class);
3.3.4 范圍查詢
List<User> users2 = mongoTemplate.find(Query.query(Criteria.where("salary").gt(30000)), User.class);
3.3.5 and查詢
List<User> users3 = mongoTemplate.find(Query.query(Criteria.where("name").is("zs").and("salary").is(25000)), User.class);
3.3.6 or查詢
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("name").is("張三"),Criteria.where("name").is("李四")
);
List<User> users4 = mongoTemplate.find(Query.query(criteria), User.class);
3.3.7 and or 查詢
List<User> users5 = mongoTemplate.find(Query.query(Criteria.where("salary").is(25000.0).orOperator(Criteria.where("name").is("zs"))), User.class);
3.3.8 排序
Query query = new Query();
query.with(Sort.by(Sort.Order.asc("id")));
List<User> users6 = mongoTemplate.find(query, User.class);
3.3.9 分頁查詢
Query pageQuery = new Query();
//查詢第一頁數(shù)據(jù),每頁展示兩條數(shù)據(jù)
pageQuery.with(Sort.by(Sort.Order.desc("id"))).skip(0).limit(2);
List<User> users7 = mongoTemplate.find(pageQuery, User.class);
3.3.10 查詢總條數(shù)
long count = mongoTemplate.count(new Query(), User.class);
System.out.println("總條數(shù)為:" + count);
3.3.11 去重
List<String> names = mongoTemplate.findDistinct(new Query(), "name", User.class, String.class);
3.3.12 json字符串查詢
BasicQuery basicQuery = new BasicQuery("{name:'zs'}");
List<User> users8 = mongoTemplate.find(basicQuery, User.class);
3.4 修改文檔
3.4.1 更新單條文檔
Update update = new Update();
update.set("salary",300000.0);
//更新符合條件的第一條數(shù)據(jù)
mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("zs")),update,User.class);
3.4.2 批量更新文檔
Update update = new Update();
update.set("salary",300000.0);
//將所有滿足條件的文檔都修改
mongoTemplate.updateMulti(Query.query(Criteria.where("name").is("zs")),update,User.class);
3.4.3 修改或插入文檔
Update update = new Update();
update.set("id",6);
update.set("salary", 300000.0);
//沒有符合條件的數(shù)據(jù),則插入數(shù)據(jù)
mongoTemplate.upsert(Query.query(Criteria.where("name").is("ls")),update,User.class);
如果沒有包含”ls“這條文檔,那么就會插入”ls“這條文檔,但是如果id重復(fù),那么就會拋出異常。
Update update = new Update();
update.set("salary", 300000.0);//沒有符合條件的數(shù)據(jù),則插入數(shù)據(jù)
UpdateResult upsert = mongoTemplate.upsert(Query.query(Criteria.where("name").is("ww")), update, User.class);//獲取本次修改記錄條數(shù)
long modifiedCount = upsert.getModifiedCount();
System.out.println(modifiedCount);
//獲取本次匹配的記錄條數(shù)
long matchedCount = upsert.getMatchedCount();
System.out.println(matchedCount);
//當(dāng)集合種沒有對應(yīng)的文檔,那么就插入文檔,獲得插入文檔自動生成的id
System.out.println(upsert.getUpsertedId());
3.5 刪除文檔
3.5.1 刪除所有文檔
mongoTemplate.remove(new Query(),User.class);
3.5.2 條件刪除
mongoTemplate.remove(Query.query(Criteria.where("name").is("ls")),User.class);