SpringBoot學習4.13-springboot集成MongoDB及增刪改查

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工程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章