In this quick article, we will discuss how to use the Spring or Spring Boot @Repository annotation with an example.
DAO or Repository classes usually represent the database access layer in an application and should be annotated with @Repository annotation.
As of Spring 2.5, this annotation also serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.
@Repository annotation internally annotated with @Component annotation as shown in the below diagram:
Whenever we annotated a class with @Repository annotation then Spring Container will automatically create a Spring bean for that class.
Let's create a simple Spring boot application to bootstrap quickly. Add the below dependencies to your pom.xml file.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Let's create a simple User JPA entity that maps with the users table in the database:
@Entity @Table(name = "users") class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; public User(int id, String name) { super(); this.id = id; this.name = name; } public User() {} public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Next, create a UserRepository interface and annotate with @Repository annotation:
@Repository interface UserRepository extends JpaRepository < User, Integer > { }
Note Spring Data JPA automatically provides an implementation for the above interface.
interface UserService { public void saveUser(User user); } @Service class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public void saveUser(User user) { userRepository.save(user); } }
Let's write a code to test UserRepository to save user objects into database table:
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args); UserService userService = (UserService) applicationContext.getBean("userServiceImpl"); userService.saveUser(new User(10, "Ramesh")); } }
Here is the complete code for your reference:
import jakarta.persistence.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args); UserService userService = (UserService) applicationContext.getBean("userServiceImpl"); userService.saveUser(new User(10, "Ramesh")); } } @Entity @Table class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; public User(int id, String name) { super(); this.id = id; this.name = name; } public User() {} public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } @Repository interface UserRepository extends JpaRepository < User, Integer > { } interface UserService { public void saveUser(User user); } @Service class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public void saveUser(User user) { userRepository.save(user); } }
Note that we have created ApplicationContext and retrieved bean using the getBean() method:
ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args); UserService userService = (UserService) applicationContext.getBean("userServiceImpl"); userService.saveUser(new User(10, "Ramesh"));
@Repository interface UserRepository extends JpaRepository < User, Integer > { }