-
Notifications
You must be signed in to change notification settings - Fork 0
Interview ‐ Spring Data (JpaRepository, MongoRepository)
Yash edited this page Mar 6, 2026
·
4 revisions
📘 Spring Data Repository Interface
Repository Hierarchy
Repository<T, ID> ← Marker interface (no methods)
└── CrudRepository<T, ID> ← Basic CRUD operations
└── PagingAndSortingRepository<T, ID> ← + Sorting & Pagination
├── JpaRepository<T, ID> ← + JPA-specific (flush, batch delete, getOne)
└── MongoRepository<T, ID> ← + Mongo-specific (insert)
Both JpaRepository and MongoRepository also extend QueryByExampleExecutor<T>.
JpaRepository |
MongoRepository |
|---|---|
package org.springframework.data.jpa.repository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;
@org.springframework.data.repository.NoRepositoryBean
public interface JpaRepository<T, ID> extends
PagingAndSortingRepository<T, ID>,
QueryByExampleExecutor<T> {
@Override
List<T> findAll();
@Override
List<T> findAll(Sort sort);
@Override
List<T> findAllById(Iterable<ID> ids);
@Override
<S extends T> List<S> saveAll(Iterable<S> entities);
// Flushes all pending changes to the database.
void flush();
// Saves an entity and flushes changes instantly.
<S extends T> S saveAndFlush(S entity);
void deleteInBatch(Iterable<T> entities);
void deleteAllInBatch();
T getOne(ID id);
@Override
<S extends T> List<S> findAll(Example<S> example);
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
} |
package org.springframework.data.mongodb.repository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;
@org.springframework.data.repository.NoRepositoryBean
public interface MongoRepository<T, ID> extends
PagingAndSortingRepository<T, ID>,
QueryByExampleExecutor<T> {
@Override
<S extends T> List<S> saveAll(Iterable<S> entities);
@Override
List<T> findAll();
@Override
List<T> findAll(Sort sort);
<S extends T> S insert(S entity);
<S extends T> List<S> insert(Iterable<S> entities);
@Override
<S extends T> List<S> findAll(Example<S> example);
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
} |
package org.springframework.data.repository;
// ── Paging & Sorting ──────────────────────────────────────────────────────────
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(org.springframework.data.domain.Sort sort); // All records, sorted
Page<T> findAll(org.springframework.data.domain.Pageable pageable); // Paginated + sorted result
}
// ── Basic CRUD ────────────────────────────────────────────────────────────────
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); // Insert or Update (upsert)
<S extends T> Iterable<S> saveAll(Iterable<S> entities); // Bulk upsert
Optional<T> findById(ID id); // Find by PK → Optional (never null)
boolean existsById(ID id); // Check existence by PK
Iterable<T> findAll(); // Fetch all records
Iterable<T> findAllById(Iterable<ID> ids); // Fetch by list of PKs
long count(); // Total row/document count
void deleteById(ID id); // Delete by PK
void delete(T entity); // Delete given entity
void deleteAll(Iterable<? extends T> entities); // Delete given list
void deleteAll(); // Delete everything — USE WITH CAUTION
}
// ── Marker interface ──────────────────────────────────────────────────────────
@Indexed
public interface Repository<T, ID> { } |
|
Maven Dependency,
application.properties
spring-boot-starter-data-jpa |
spring-boot-starter-data-mongodb |
|---|---|
Maven Dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<!-- Exclude HikariCP if using Tomcat JDBC pool instead -->
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- SQL Server JDBC driver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Tomcat JDBC Connection Pool (if replacing HikariCP) -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>application.properties
#-----------------------------------------
# SQL Server DataBase Properties
#-----------------------------------------
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=finance
spring.datasource.username=sa
spring.datasource.password=Strong@123
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect
#-----------------------------------------
# DataBase Connection Pool (Tomcat JDBC)
#-----------------------------------------
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.test-on-return=false
spring.datasource.tomcat.validation-query=select 1
spring.datasource.tomcat.initial-size=15
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=15
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true
spring.datasource.tomcat.log-validation-errors=true
spring.datasource.log-abandoned=true
#-----------------------------------------
# JPA / Hibernate Properties
#-----------------------------------------
# none | validate | update | create | create-drop
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
# Preserve column names as declared in @Column(name="...")
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# Required for @CreatedDate / @LastModifiedDate to work
spring.jpa.properties.javax.persistence.validation.mode=none |
Maven Dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>#-----------------------------------------
# MongoDB Properties
#-----------------------------------------
spring.data.mongodb.uri=mongodb://localhost:27017/local?authSource=admin&ssl=false&maxPoolSize=1000
# Alternative: individual properties
# spring.data.mongodb.host=localhost
# spring.data.mongodb.port=27017
# spring.data.mongodb.database=local
# spring.data.mongodb.username=admin
# spring.data.mongodb.password=secret |
AI productivity tools: Apple’s Genius Plan to Win the AI Race (without building an AI model), Elon Musk’s Grok AI Empire
- Microsoft(PC's 49%) -> Azure Cloud -> Open AI
chatgpt - Google(Android) -> Google Cloud Platform -> Gemini
- Instagram/WhatsApp Meta Ai
- Elon Musk’s -> Colossus Datacenter -> GrokAI
blackbox.ai- Z AI