Bird
Raised Fist0
Spring Bootframework

Service calling repository in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the role of a Service class in Spring Boot when calling a Repository?
The Service class contains business logic and calls the Repository to access or modify data in the database. It acts as a bridge between controllers and repositories.
Click to reveal answer
beginner
How do you inject a Repository into a Service class in Spring Boot?
You inject a Repository into a Service class using the @Autowired annotation or constructor injection, allowing the Service to use Repository methods.
Click to reveal answer
beginner
Why should a Service call a Repository instead of directly accessing the database?
The Service layer separates business logic from data access, making code easier to maintain, test, and reuse. It keeps responsibilities clear.
Click to reveal answer
beginner
What annotation marks a class as a Service in Spring Boot?
The @Service annotation marks a class as a Service component, making it a candidate for Spring's component scanning and dependency injection.
Click to reveal answer
beginner
Show a simple example of a Service method calling a Repository method.
Example:
@Service
public class UserService {
  private final UserRepository userRepository;

  public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
  }

  public User getUserById(Long id) {
    return userRepository.findById(id).orElse(null);
  }
}
Click to reveal answer
What annotation is typically used to inject a Repository into a Service in Spring Boot?
A@Autowired
B@Repository
C@Service
D@ComponentScan
Which layer should contain business logic in a Spring Boot application?
ARepository layer
BEntity layer
CController layer
DService layer
What does the Repository layer mainly handle?
AUser interface rendering
BData access and database operations
CBusiness rules
DHTTP request handling
Which annotation marks a class as a Service in Spring Boot?
A@Controller
B@Repository
C@Service
D@Entity
Why is it better to call a Repository from a Service instead of directly from a Controller?
ATo separate business logic from data access
BTo make the Controller heavier
CTo avoid using Spring annotations
DTo skip database transactions
Explain the relationship between Service and Repository layers in Spring Boot.
Think about who talks to the database and who processes the data.
You got /4 concepts.
    Describe how to inject a Repository into a Service class and why it is important.
    Focus on how Spring manages dependencies between classes.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main role of a Service class in Spring Boot when it calls a Repository?
      easy
      A. To configure the database settings
      B. To directly manage database connections
      C. To replace the repository and perform SQL queries
      D. To handle business logic and use the repository for data access

      Solution

      1. Step 1: Understand the role of Service

        The Service layer contains business logic and does not directly access the database.
      2. Step 2: Understand the role of Repository

        The Repository handles data access and database operations.
      3. Final Answer:

        To handle business logic and use the repository for data access -> Option D
      4. Quick Check:

        Service handles logic, Repository handles data [OK]
      Hint: Service = logic, Repository = data access [OK]
      Common Mistakes:
      • Thinking Service manages database connections
      • Confusing Repository with Service responsibilities
      • Assuming Service runs SQL queries directly
      2. Which is the correct way to inject a repository into a service class in Spring Boot?
      easy
      A. Use @Autowired on a constructor parameter
      B. Create a new repository instance inside the service method
      C. Use new keyword to instantiate repository in service constructor
      D. Declare repository as a static variable in the service

      Solution

      1. Step 1: Understand dependency injection in Spring Boot

        Spring Boot recommends constructor injection with @Autowired for better testability and immutability.
      2. Step 2: Check options for repository injection

        Creating new instances manually or static variables break Spring's management and are not recommended.
      3. Final Answer:

        Use @Autowired on a constructor parameter -> Option A
      4. Quick Check:

        Constructor injection with @Autowired [OK]
      Hint: Use @Autowired constructor injection for repositories [OK]
      Common Mistakes:
      • Manually creating repository instances
      • Using static variables for repository
      • Not using Spring's dependency injection
      3. Given this service code snippet, what will getUserName(1) return if the repository finds a user with name "Alice"?
      public class UserService {
        private final UserRepository userRepository;
      
        public UserService(UserRepository userRepository) {
          this.userRepository = userRepository;
        }
      
        public String getUserName(int id) {
          return userRepository.findById(id).map(User::getName).orElse("Unknown");
        }
      }
      medium
      A. null
      B. "Unknown"
      C. "Alice"
      D. Throws NullPointerException

      Solution

      1. Step 1: Understand repository method behavior

        findById(id) returns an Optional containing the User if found.
      2. Step 2: Analyze service method logic

        The method maps the User to its name or returns "Unknown" if no user is found.
      3. Final Answer:

        "Alice" -> Option C
      4. Quick Check:

        User found returns name, else "Unknown" [OK]
      Hint: Optional.map returns value or default [OK]
      Common Mistakes:
      • Assuming null is returned instead of default
      • Expecting exception when user not found
      • Confusing Optional usage
      4. What is wrong with this service code that calls a repository?
      @Service
      public class ProductService {
        private ProductRepository productRepository;
      
        public void saveProduct(Product product) {
          productRepository.save(product);
        }
      }
      medium
      A. The save method does not exist in repositories
      B. The repository is not injected, so it will cause a NullPointerException
      C. The service class must be abstract
      D. The Product parameter should be annotated with @Entity

      Solution

      1. Step 1: Check repository injection

        The repository field is declared but not injected or initialized.
      2. Step 2: Understand consequence of missing injection

        Calling save on a null repository causes NullPointerException at runtime.
      3. Final Answer:

        The repository is not injected, so it will cause a NullPointerException -> Option B
      4. Quick Check:

        Missing injection causes null pointer error [OK]
      Hint: Always inject repository before use [OK]
      Common Mistakes:
      • Forgetting @Autowired or constructor injection
      • Assuming repository auto-initializes
      • Confusing entity annotation with parameter
      5. You want to create a service method that returns all active users from the database. The repository has a method List<User> findByActiveTrue(). How should the service method call the repository and return the list?
      hard
      A. public List<User> getActiveUsers() { return userRepository.findByActiveTrue(); }
      B. public List<User> getActiveUsers() { return userRepository.findAll(); }
      C. public List<User> getActiveUsers() { return userRepository.findByActiveFalse(); }
      D. public List<User> getActiveUsers() { return null; }

      Solution

      1. Step 1: Identify repository method for active users

        The repository method findByActiveTrue() returns users with active = true.
      2. Step 2: Use repository method in service

        The service should call this method and return its result directly.
      3. Final Answer:

        public List<User> getActiveUsers() { return userRepository.findByActiveTrue(); } -> Option A
      4. Quick Check:

        Call matching repository method for active users [OK]
      Hint: Call repository method matching your filter [OK]
      Common Mistakes:
      • Calling findAll() returns all users, not filtered
      • Using findByActiveFalse() returns inactive users
      • Returning null instead of data