1. 程式人生 > >在SpringBoot下用java操作MongoDB資料庫的增刪改查

在SpringBoot下用java操作MongoDB資料庫的增刪改查

首先我們需要建立一個SpringBoot工程,在IDEA中有快捷的建立方式。


new -> project -> Spring Initializr 根據需要一路next下去即可


第二步,給application.properties新增MongoDB配置

#MongoDB
#spring.data.mongodb.username=root
#spring.data.mongodb.password=
spring.data.mongodb.host=localhost
spring.data.mongodb.repositories.enabled=true
spring.data.mongodb.database=
spring.data.mongodb.port=27017

第三步,在工程中建立一個實體類,便於接下來的測試(@Data註解屬於lombok外掛,用於簡化getter,setter方法)

@Data
@Document(collection="student")    
class Student{
  @Id
  String _id;
  String name;
  String class_id;
  String sex;
  Integer age;
}

第四步,建立一個controller類,編寫四個介面用於測試

@RestController
public class MongoTestController {
  
  @Autowired MongoTemplate mongoTemplate;

  @RequestMapping(value = "/save", method = RequestMethod.GET)
  public void save(){
    Student student = new Student();
    student.setName("張三");
    student.setAge(18);
    student.setSex("男");
    student.setId(UUID.randomUUID().toString());
    
    mongoTemplate.save(student);
  }

  @RequestMapping(value = "/del", method = RequestMethod.GET)
  public void del(){
    // 刪除name = 張三的資料
    Criteria criteria = Criteria.where("name").is("張三");
//    刪除年齡 > 17
//    Criteria.where("age").gt(17);
//    刪除年齡 <= 19
//    Criteria.where("age").lte(19)
    Query query = Query.query(criteria);
    
    mongoTemplate.remove(query, Student.class);
//    一樣的效果
//    mongoTemplate.remove(query, "student");
  }

  @RequestMapping(value = "/update", method = RequestMethod.GET)
  public void update(){
    // 匹配條件name = 張三
    Criteria criteria = Criteria.where("name").is("張三");
    Query query = Query.query(criteria);
    // 修改年齡 = 20
    Update update = new Update();
    update.set("age", 20);
    
    // updateFirst 刪除匹配到的第一個學生
    mongoTemplate.updateFirst(query, update, Student.class);
//    mongoTemplate.updateFirst(query, update, "student");
    // updateMulti 刪除所有 name = 張三 的學生
    mongoTemplate.updateMulti(query, update, Student.class);
  }
  
  @RequestMapping(value = "/query", method = RequestMethod.GET)
  public void query(){
    // 匹配條件sex = 男
    Criteria criteria = Criteria.where("sex").is("男");
    Query query = Query.query(criteria);

    // 查詢名字為張三的所有學生
    List<Student> students = mongoTemplate.find(query, Student.class);
    
    // 類似的 查詢年齡 > 18的學生
    Criteria criteria1 = Criteria.where("age").lt(18);
    Query query1 = Query.query(criteria);
    List<Student> students1 = mongoTemplate.find(query1, Student.class);
  }
  
}

上面的程式碼使用了SpringBoot自帶的MongoTemplate API實現了對資料庫的CRUD操作。

同時,還有第二種實現方式,建立一個實體類的Dao介面,繼承MongoRepository介面。MongoRepository第一個泛型裡面填入與資料庫互動的實體Bean,第二個泛型是該實體Bean的id型別。

public interface StudentDao extends MongoRepository<Student, String>{
}

這樣,我們就可以在需要對該實體Bean和資料庫互動的類中自動注入進去,使用該介面的API

@Autowired StudentDao studentDao;

比如一些基本的操作如下:

    //根據id查詢一條資料
    studentDao.findOne(id);
    
    //查出所有資料
    studentDao.findAll();
    
    //根據id刪除一條資料
    studentDao.delete(id);
    
    //儲存一個Student物件
    studentDao.save(student);
    
    //沒有修改的方法,只需要save一次相同id的Student物件即可修改