Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

Spring Boot MongoDB Examples - TechMart

Spring Data MongoDB examples demonstrating the same TechMart e-commerce scenarios using Spring Boot patterns.

🎯 Overview

This module provides Spring Boot + Spring Data MongoDB implementations of the TechMart examples, demonstrating:

  • POJO Mapping - @Document, @Id, @Indexed annotations
  • Repositories - Derived queries, @Query, @Aggregation
  • MongoTemplate - Complex queries, aggregations, change streams
  • Transactions - @Transactional with MongoDB
  • Validation - Bean Validation (JSR-380) with MongoDB
  • Security - Encryption concepts with POJOs
  • Atlas Features - Search and Vector Search integration

📋 Examples (17 total)

# Example Spring Data Features
E01 Document Model @Document, @Id, @Indexed, POJO mapping
E02 Flexible Schema Map<String, Object> for dynamic attributes
E03 CRUD Operations Repository methods, derived queries
E04 Index Types @Indexed, @CompoundIndex, @TextIndexed, indexOps()
E05 Aggregation @Aggregation, MongoTemplate, fluent API
E06 Transactions @Transactional, MongoTransactionManager
E07 Change Streams MongoTemplate.watch(), real-time notifications
E08 Materialized Views $merge aggregation, pre-computed analytics
E09 Schema Validation Bean Validation, @Valid, @NotBlank, @Email, @Pattern
E12 Queryable Encryption Conceptual demo with encrypted POJOs
E13 Client-Side FLE Per-customer keys, crypto-shredding for GDPR
E10 Time Series IoT sensors, time bucketing, TTL, aggregation
E14 Atlas Search Full-text, fuzzy, autocomplete with MongoTemplate
E15 Vector Search AI/semantic search, RAG, Spring AI integration
E16 Replica Set Read preferences, write concerns, workload isolation

🚀 Quick Start

Prerequisites

  • Java 17+
  • Maven 3.6+
  • MongoDB 7.0+ (local or Atlas)

Running

# From project root
cd spring-boot-examples

# Show available examples menu
mvn spring-boot:run

# Run a specific example
mvn spring-boot:run -Dspring-boot.run.arguments="--example=E01"

# Run multiple examples (space-separated)
mvn spring-boot:run -Dspring-boot.run.arguments="--example=E01 --example=E03"

# Run ALL examples sequentially
mvn spring-boot:run -Dspring-boot.run.arguments="--example=ALL"

# Or from parent directory
mvn spring-boot:run -pl spring-boot-examples -Dspring-boot.run.arguments="--example=E05"

Configuration

Set MongoDB connection in application.yml or via environment:

export MONGODB_URI="mongodb://localhost:27017"
export MONGODB_DATABASE="techmart"

📁 Project Structure

spring-boot-examples/
├── pom.xml
├── src/main/java/com/mongodb/examples/springboot/
│   ├── TechMartApplication.java      # Main entry point
│   ├── config/
│   │   └── MongoConfig.java          # Transaction config
│   ├── model/                        # Document classes (POJOs)
│   │   ├── Product.java
│   │   ├── Customer.java
│   │   ├── Order.java
│   │   ├── Inventory.java
│   │   ├── ValidatedCustomer.java    # Bean Validation demo
│   │   ├── EncryptedCustomer.java    # Encryption demo
│   │   ├── CsfleCustomer.java        # CSFLE demo
│   │   └── SearchProduct.java        # Atlas Search/Vector demo
│   ├── repository/                   # Spring Data repositories
│   │   └── ...Repository.java
│   ├── service/
│   │   └── OrderService.java         # Transaction example
│   └── examples/                     # Runnable examples
│       ├── ExampleMenu.java          # Shows available examples
│       ├── E01_DocumentModelExample.java
│       ├── E02_FlexibleSchemaExample.java
│       ├── ...
│       ├── E14_AtlasSearchExample.java
│       └── E15_VectorSearchExample.java
└── src/main/resources/
    └── application.yml

🔄 Comparison: Driver vs Spring Data

Feature Native Driver Spring Data MongoDB
Document creation new Document().append() POJOs with @Document
CRUD operations collection.insertOne() repository.save()
Queries Filters.eq() findBy...() methods
Indexes collection.createIndex() @Indexed, @CompoundIndex
Aggregation collection.aggregate() @Aggregation, MongoTemplate
Transactions ClientSession @Transactional
Change Streams collection.watch() MongoTemplate.watch()
Validation MongoDB JSON Schema Bean Validation (JSR-380)
Atlas Search $search stage MongoTemplate + Document
Vector Search $vectorSearch stage MongoTemplate + Spring AI

📚 Key Spring Data MongoDB Annotations

// Collection mapping
@Document(collection = "products")
public class Product {
    
    @Id
    private String id;
    
    @Indexed(unique = true)
    private String sku;
    
    @TextIndexed
    private String name;
    
    @CompoundIndex(name = "cat_price", def = "{'category': 1, 'price': -1}")
}

// Bean Validation
@Document(collection = "customers")
public class ValidatedCustomer {
    
    @NotBlank(message = "Email is required")
    @Email(message = "Must be valid email")
    private String email;
    
    @Min(18) @Max(120)
    private Integer age;
    
    @Valid  // Validates nested objects
    private Address address;
}

// Vector Search embedding
@Document(collection = "products_search")
public class SearchProduct {
    private String name;
    private String description;
    private List<Double> embedding;  // AI-generated vector
}

📖 Resources