1.添加maven依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
2.spring配置
mongodb可以不用用戶名和密碼訪問。
spring:
data:
mongodb:
database: springmongodb
host: localhost
port: 27017
#username: spring
#password: 123456
3.操作mongodb
使用MongoTemplate操數據庫,進行增刪改查。
@Document標準pojo爲文檔實體類,@Id標註文檔主鍵,@Field關聯pojo和數據庫中的字段。
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
@Service
public class UserService {
// 操作mongodb的模板
@Autowired
private MongoTemplate mongoTemplate;
// 數據庫集合名稱
private String collectionName = "user";
// 保存或更新
public User insert(User user) {
// 保存,主鍵已有則更新其所有屬性
return mongoTemplate.save(user, collectionName);
}
// 根據主鍵查詢
public User findById(String id) {
return mongoTemplate.findById(id, User.class, collectionName);
}
// 條件查詢,or
public List<User> findUsers(String name, String note) {
Criteria criteriaName = Criteria.where("name").regex(name);
Criteria criteriaNote = Criteria.where("note").regex(note);
Criteria criteria = new Criteria();
criteria.orOperator(criteriaName, criteriaNote);// 或者
Query query = Query.query(criteria).limit(100).skip(0);
return mongoTemplate.find(query, User.class, collectionName);
}
// 條件查詢,and
public List<User> findUsers2(String name, int age) {
Criteria criteria = Criteria.where("name").regex(name).and("age").is(age); // 並且
Query query = Query.query(criteria).limit(100).skip(0);
return mongoTemplate.find(query, User.class, collectionName);
}
// 根據主鍵更新,如果所有屬性都沒有變化則getModifiedCount返回0
public long updateById(String id, String note, int age) {
Criteria criteria = Criteria.where("id").is(id);
Update update = Update.update("note", note);
update.set("age", age);
Query query = Query.query(criteria);
UpdateResult updateResult = mongoTemplate.updateMulti(query, update, User.class, collectionName);
return updateResult.getModifiedCount();
}
// 根據主鍵刪除
public long deleteById(String id) {
Criteria criteria = Criteria.where("id").is(id);
Query query = Query.query(criteria);
DeleteResult deleteResult = mongoTemplate.remove(query, User.class, collectionName);
return deleteResult.getDeletedCount();
}
}
創建文檔實體類:User.java
import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
// 文檔實體類
@Document //該pojo將作爲MongoDB文檔存在
public class User implements Serializable{//必須實現序列化接口
private static final long serialVersionUID = 7767440606893451627L;
@Id //文檔主鍵
private String id;
@Field("name")//關聯數據庫中的字段,二者不同時標註,相同則不用標註
private String name;
private int age;
private String note;
//setters and getters
}
上個圖感受一下數據庫內的數據:
還有部分測試代碼爲貼上,已上傳github:https://github.com/zhangyangfei/SpringBootLearn.git中的spring-mongodb工程。