-
[Spring Boot] JPA 설정 및 연동하기Spring 2021. 12. 20. 11:16반응형
1) JPA 사용 이유
- 신규 컬럼이 추가되어 작업을 하게되면 수정해야 되는 부분들이 많고 반복되어 지기 때문에
그러한 단점들을 개선하고 효율적으로 개발하기 위한 방법들에 관심을 갖기 시작하였고 그것이 JPA(Java Persistence API)입니다.
2) 장단점
장점
- 생산성이 뛰어나고 유지보수하기에 좋다
- DBMS에 대한 종속성이 줄어든다.(JPA 사용이유에 대한 내용)
단점
- 복잡한 쿼리를 사용해야 할 때 불리하다.
3) 설정하기
- Dependency 추가
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
- Properties 설정
#JPA 설정 #Dialect 설정 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect # 하이버네이트가 실행하는 모든 SQL문을 콘솔로 출력해준다 spring.jpa.properties.hibernate.show_sql=true #콘솔에 출력되는 JPA 실행 쿼리를 가독성있게 표현한다. spring.jpa.properties..hibernate.format_sql=true #디버깅이 용이하도록 SQL문 이외에 추가적인 정보를 출력해준다. spring.jpa.properties.hibernate.use_sql_comments=true
- Entity생성 ( VO )
@Data @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity(name="users") // JPA가 관리하는 클래스, 매핑할 테이블을 해당 어노테이션을 붙인다. public class UserVO { // 기본키(PK)을 지정하기 위함 @Id // 자동 INCREMENT로 설정하기 위한 어노테이션 // GenerationType.IDENTITY는 키 생성을 데이터베이스에 위임하는 방식 @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; private String password; private String passwordSalt; private String regDt; private String auth; } // 해당 Entity(VO)는 매핑할 테이블 컬럼들을 나열해 놓은것에 맞춰 작성
- Repository 생성
@Repository public interface UserRepository extends JpaRepository<UserVO, Long> { // findBy뒤에 컬럼명을 붙여주면 이를 이용한 검색들이 가능하다. public List<UserVO> findById(String id); public List<UserVO> findByName(String id); // 검색기능도 가능하다 public List<UserVO> findByNameLike(String keyword); }
- Repository Service 생성
@Service public class UserRepositoryService { @Autowired private UserRepository userRepository; // 리스트를 불러올때 사용 public List<UserVO> findAll() { List<UserVO> users = new ArrayList<>(); userRepository.findAll().forEach(e -> users.add(e)); return users; } // 하나의 데이터만 불러올때 사용 public Optional<UserVO> findById(Long id){ Optional<UserVO> user = userRepository.findById(id); return user; } }
- Controller 생성
@Slf4j // 제일 앞 중복 URL 적용 @RequestMapping(value="userTest") @Controller public class UserContorller { @Autowired UserRepositoryService userRepositoryService; // 모든 사용자를 조회 @GetMapping(produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity<List<UserVO>> getAllUser() { List<UserVO> users = userRepositoryService.findAll(); return new ResponseEntity<List<UserVO>>(users, HttpStatus.OK); } // 한 명의 사용자만 조회 @GetMapping(value="/{id}",produces = { MediaType.APPLICATION_JSON_VALUE } ) public ResponseEntity<UserVO> getUser(@PathVariable("id") Long id) { Optional<UserVO> user = userRepositoryService.findById(id); return new ResponseEntity<UserVO>(user.get(), HttpStatus.OK); } }
- 동작 확인
감사합니다.
반응형'Spring' 카테고리의 다른 글
[iBatis] JDBC-90611:Specified column name was not found. 오류해결 (0) 2021.02.24 Tiles - JAVA파일로 쉽게 설정하기 [Spring Boot] (0) 2020.04.05 Whitelabel Error Page 해결하기 [Spring Boot] (0) 2020.03.20 tiles 설정하기 [Spring] (0) 2018.02.14 Http 에러코드 정리 (0) 2018.01.08