Boilerplate code refers to repetitive, verbose code that you have to write over and over again with little variation. It's code that follows the same pattern but doesn't add much business value.
Examples of Boilerplate Code:
1. Traditional DAO (Data Access Object) Pattern:
// WITHOUT Spring Data JPA - LOTS of boilerplate
public class UserDAOImpl implements UserDAO {@Autowiredprivate EntityManager entityManager;public User save(User user) {if (user.getId() == null) {entityManager.persist(user);return user;} else {return entityManager.merge(user);}}public User findById(Long id) {return entityManager.find(User.class, id);}public List<User> findAll() {return entityManager.createQuery("SELECT u FROM User u", User.class).getResultList();}public void delete(User user) {entityManager.remove(entityManager.contains(user) ? user : entityManager.merge(user));}public List<User> findByUsername(String username) {return entityManager.createQuery("SELECT u FROM User u WHERE u.username = :username", User.class).setParameter("username", username).getResultList();}
}
2. WITH Spring Data JPA - NO boilerplate:
// Just this interface - Spring generates everything!
public interface UserRepository extends JpaRepository<User, Long> {List<User> findByUsername(String username);
}
Other Boilerplate Examples:
Getters/Setters:// Boilerplate
public class User {private String name;public String getName() { return name; }public void setName(String name) { this.name = name; }
}// With Lombok - eliminates boilerplate
@Data
public class User {private String name;
}
Exception Handling:
// Boilerplate
try {// some operation
} catch (Exception e) {logger.error("Error occurred", e);throw new ServiceException("Operation failed", e);
}
Configuration:
// Boilerplate XML configuration
<bean id="userService" class="com.example.UserService"><property name="userRepository" ref="userRepository"/>
</bean>// Spring Boot auto-configuration - no boilerplate
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;
}
Why Boilerplate is Bad:
- Repetitive - same code written multiple times
- Error-prone - more code = more bugs
- Maintenance burden - changes require updating many places
- Reduces productivity - time spent on non-business logic
How Frameworks Reduce Boilerplate:
- Code generation (Spring Data JPA)
- Annotations (Lombok, Spring)
- Convention over configuration (Spring Boot)
- Auto-configuration (Spring Boot starters)
The goal is to write less code that does more - focusing on business logic rather than infrastructure concerns.