在現代企業級應用開發中,MongoDB 作為一款高性能、無模式的文檔型數據庫,已成為 Java 開發者的熱門選擇。本文將詳細介紹如何使用 Spring Data MongoDB 的 MongoTemplate 實現數據庫的連接與增刪改查(CRUD)操作,並採用接口與實現類分離的設計模式,提升代碼的可維護性與擴展性。
在 pom.xml 中引入 Spring Data MongoDB 依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
首先創建 AbstractRepository 接口,規範數據訪問的標準契約:
package com.dao;
import java.util.List;
import com.bean.Company;
public interface AbstractRepository {
List<?> findAll(Class<?> entity);
Company findOne(String id, Class<?> entity);
void updateEntity(Company company);
void delete(String id, Class<Company> clazz);
void insert(Company company);
}
使用 @Repository 標註實現類,並注入 MongoTemplate 進行核心操作:
package com.dao;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
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.stereotype.Repository;
import com.bean.Company;
@Repository
public class RepositoryImpl implements AbstractRepository {
@Autowired
private MongoTemplate mongoTemplate;
// 查詢所有數據
@Override
public List<?> findAll(Class<?> entity) {
return mongoTemplate.findAll(entity);
}
// 根據 ID 查詢單條數據
@Override
public Company findOne(String id, Class<?> entity) {
Query query = new Query(Criteria.where("id").is(id));
return mongoTemplate.findOne(query, entity);
}
// 更新或保存數據(upsert 機制)
@Override
public void updateEntity(Company company) {
mongoTemplate.save(company);
}
// 刪除指定 ID 的數據
@Override
public void delete(String id, Class<Company> clazz) {
Query query = new Query(Criteria.where("id").is(id));
Company company = mongoTemplate.findOne(query, clazz);
if (company != null) {
mongoTemplate.remove(company);
}
}
// 新增數據
@Override
public void insert(Company company) {
mongoTemplate.insert(company);
}
}
Query 與 Criteria 實現精確條件查詢Query 與 Criteria 采用鏈式調用,構建靈活的查詢條件:
Query query = new Query(Criteria.where("fieldName").is(value));
fields() 只返回所需字段,減少網絡傳輸skip() 與 limit() 實現分頁MongoException 並轉換為業務異常Spring Data MongoDB 的 MongoTemplate 提供了強大且靈活的數據操作能力,其 API 設計與關係型數據庫的 JdbcTemplate 理念一脈相承,降低了開發者的學習成本。通過接口隔離實現細節,不僅符合依賴倒置原則,也為後續遷移數據源或引入緩存層預留了擴展空間。