Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 권한
- RAISERRR
- ERROR_MESSAGE
- 자바
- springboot
- java
- JavaScript
- IT
- Exception in thread "main" java.lang.Error
- SOP
- 프로시저
- DB
- 스프링부트
- .NET 8.0
- 스프링 시큐리티
- git
- 데이터베이스
- Newtonsoft.Json
- ORM
- SSMS
- SQL Server 구성 관리자
- IT story
- github
- System.Text.Json
- C#
- SQL Server
- MSSQL
- jpa
- cors
- OUT 파라미터
Archives
- Today
- Total
its_jh_stroy
[Springboot] JPA를 쉽게 사용하기 위한 Spring Data JPA 본문
Spring Data JPA
스프링에서 제공해 주는 JPA 인터페이스
JPA 인터페이스 기반으로 더욱 추상화된 메서드를 제공받을 수 있다.
데이터베이스 연결하고 모델 만들기
Spring Data JPA는 데이터베이스와 상호작용을 위한 것이기 때문에 데이터베이스 연결과 모델을 만들어야 한다.
여기서는 스프링부트에서 제공하는 H2 데이터베이스를 사용할 것이다.
# application.properties
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.defer-datasource-initialization=true
// Food.java
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
@Getter
@Entity
@Table(name="food")
public class Food {
@Id
@Column(name="id")
private Long id;
@Column(name="name")
private String name;
@Column(name="price")
private int price;
}
초기 데이터 설정하기
뒤에 저장하는 코드도 작성할 예정이므로 이 단계는 생략해도 상관없다.
생략하지 않는다면 resources 위치에 data.sql 파일을 만들어 작성하면 된다.
-- data.sql
INSERT INTO food (id, name, price)
VALUES
(1, 'rice', 1000),
(2, 'meat', 3000);
코드 작성하기
스프링부트에서는 JpaRepository 인터페이스를 상속받는 것으로 Spring Data JPA를 사용할 수 있다.
JpaRepository를 상속받으면 내부적으로 FoodRepository 객체까지 생성되어 인터페이스에 선언된 메서드를 따로 작성하지 않아도 사용할 수 있게 된다.
// FoodRepository.java
public interface FoodRepository extends JpaRepository<Food, Long> { }
// FoodService.java
@RequiredArgsConstructor
@Service
public class FoodService {
private final FoodRepository foodRepository;
public List<Food> findAll() {
return foodRepository.findAll();
}
public void save(Food food) {
foodRepository.save(food);
}
}
// FoodController.java
@RequiredArgsConstructor
@RestController
public class FoodController {
private final FoodService foodService;
@ResponseBody
@GetMapping("/list")
public List<Food> findAll() {
return foodService.findAll();
}
// {
// "id": 3,
// "name": "new food",
// "price": 20000
// }
@ResponseBody
@PostMapping("/save")
public void save(@RequestBody Food food) {
foodService.save(food);
}
}
'Java' 카테고리의 다른 글
[Springboot] JPA와 ORM (0) | 2024.08.21 |
---|---|
[Springboot] JPA를 알아보기 위한 JDBC (0) | 2024.08.08 |
[Java] Optional<T> 타입 (0) | 2024.07.25 |
[Springboot] JPA에서 pagination 구현하기 (0) | 2024.07.21 |
[Springboot] Spring Security로 접근 권한 제어하기 (0) | 2024.07.18 |