☰ See All Chapters |
Spring @Repository Annotation
@Repository annotation can be called as specialized form of @Component annotation. By annotating a class with @Repository annotation we indicate that a class is a "Data Access Object", may also apply this stereotype to DAO classes or something similar. There is no any other specialty from @Component annotation except using it for the DAO class. A class thus annotated is eligible for Spring DataAccessException translation when used in conjunction with a PersistenceExceptionTranslationPostProcessor. The annotated class is also clarified as to its role in the overall application architecture for the purpose of tooling, aspects, etc.
Let’s create a simple spring application where we use @Service annotation.
Spring @Repository Annotation Example
Database script (MySQL)
CREATE TABLE STUDENT ( STUDENTID INT NOT NULL AUTO_INCREMENT, FIRSTNAME VARCHAR(20) DEFAULT NULL, LASTNAME VARCHAR(20) DEFAULT NULL, MARKS INT(20) DEFAULT NULL, PRIMARY KEY (STUDENTID) ); |
pom.xml
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.java4coding</groupId> <artifactId>SpringDataJPA_Repository_Annotation_Example</artifactId> <version>0.0.1-SNAPSHOT</version>
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.1.Final</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>2.1.4.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.14</version> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project> |
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="https://java.sun.com/xml/ns/persistence" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://java.sun.com/xml/ns/persistence https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="StudentPU"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/study" /> <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <property name="hibernate.archive.autodetection" value="class" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence> |
Student.java
package com.java4coding;
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery;
@Entity public class Student {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long studentId; private String firstName; private String lastName; private Long marks; public Student() { super(); }
public Student(String firstName, String lastName, Long marks) { super(); this.firstName = firstName; this.lastName = lastName; this.marks = marks; }
//Setters and getters public Long getId() { return studentId; }
public void setId(Long id) { this.studentId = id; }
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public Long getMarks() { return marks; }
public void setMarks(Long marks) { this.marks = marks; }
@Override public String toString() { return "Student [firstName=" + firstName + ", lastName=" + lastName + ", Marks= " + marks + "]"; } } |
AppConfig.java
package com.java4coding;
import javax.persistence.EntityManagerFactory;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
@Configuration @EnableJpaRepositories(basePackages = {"com.java4coding"}) public class AppConfig { @Bean public LocalEntityManagerFactoryBean entityManagerFactory() { LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean(); factoryBean.setPersistenceUnitName("StudentPU");
return factoryBean; }
@Bean public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager; } } |
StudentRepository.java
package com.java4coding;
import java.util.List; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param;
public interface StudentRepository extends CrudRepository<Student, Long>{ } |
StudentService.java
package com.java4coding;
import java.util.List; import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository;
@Repository public class StudentService { @Autowired private StudentRepository repository;
public void test() {
//Create Student student = new Student("Manu", "Manjunatha", 100L); repository.save(student); student = new Student("Advith", "Tyagraj", 100L); repository.save(student); student = new Student("Likitha", "Tyagraj", 96L); repository.save(student); student = new Student("ABC", "XYZ", 90L); repository.save(student);
//Read All List<Student> students1 = (List<Student>) repository.findAll(); students1.forEach(student1 -> System.out.println(student1));
//Read by ID Student student2 = null; Optional<Student> result = repository.findById(3L); if (result.isPresent()) { student2 = result.get(); System.out.println(student2); }
//Update if (student2 != null) { student2.setMarks(98L); repository.save(student2); }
//Delete repository.delete( new Student("ABC", "XYZ", 90L)); repository.deleteById(4L);
// Count number of customer long count = repository.count(); System.out.println("Number of students: " + count);
} } |
Test.java
package com.java4coding;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(); appContext.scan("com.java4coding"); appContext.refresh();
StudentService studentService = (StudentService) appContext.getBean("studentService"); studentService.test();
appContext.close(); } } |
Project directory structure
Output in database
Output
Hibernate: insert into Student (firstName, lastName, marks) values (?, ?, ?) Hibernate: insert into Student (firstName, lastName, marks) values (?, ?, ?) Hibernate: insert into Student (firstName, lastName, marks) values (?, ?, ?) Hibernate: insert into Student (firstName, lastName, marks) values (?, ?, ?) Hibernate: select student0_.studentId as studentI1_0_, student0_.firstName as firstNam2_0_, student0_.lastName as lastName3_0_, student0_.marks as marks4_0_ from Student student0_ Student [firstName=Manu, lastName=Manjunatha, Marks= 100] Student [firstName=Advith, lastName=Tyagraj, Marks= 100] Student [firstName=Likitha, lastName=Tyagraj, Marks= 96] Student [firstName=ABC, lastName=XYZ, Marks= 90] Hibernate: select student0_.studentId as studentI1_0_0_, student0_.firstName as firstNam2_0_0_, student0_.lastName as lastName3_0_0_, student0_.marks as marks4_0_0_ from Student student0_ where student0_.studentId=? Student [firstName=Likitha, lastName=Tyagraj, Marks= 96] Hibernate: select student0_.studentId as studentI1_0_0_, student0_.firstName as firstNam2_0_0_, student0_.lastName as lastName3_0_0_, student0_.marks as marks4_0_0_ from Student student0_ where student0_.studentId=? Hibernate: update Student set firstName=?, lastName=?, marks=? where studentId=? Hibernate: insert into Student (firstName, lastName, marks) values (?, ?, ?) Hibernate: delete from Student where studentId=? Hibernate: select student0_.studentId as studentI1_0_0_, student0_.firstName as firstNam2_0_0_, student0_.lastName as lastName3_0_0_, student0_.marks as marks4_0_0_ from Student student0_ where student0_.studentId=? Hibernate: delete from Student where studentId=? Hibernate: select count(*) as col_0_0_ from Student student0_ Number of students: 3 |
All Chapters