spring
-
스프링 JPA (스프링 데이터 JPA - 7)Programming/Spring Data JPA 2021. 1. 1. 15:48
- @EnableJpaRepositories 스프링 부트를 사용하지 않을 때는 @Configuration과 같이 사용 1. 엔티티 저장하기 - save()호출되면 현재 상태에 따라 persist, merge가 호출됨 Transient상태이면 persist - (create) Detached상태이면 merge - (update, 없으면 create) - Transient인지 Detached인지 어떻게 판단? 엔티티의 @Id프로퍼티를 찾아서 null이면 Transient 상태로 판단함 - EntityManager.persist() 메소드에 넘긴 객체를 Persistent 상태로 변경 - EntityManager.merge() 메소드에 넘긴 객체의 복사본을 만들고, 그 복사본을 다시 Persistent 상태로..
-
스프링 데이터 Common - Web (스프링 데이터 JPA - 6)Programming/Spring Data JPA 2021. 1. 1. 15:47
1. 스프링 Converter - PostController.java @RestController public class PostController { @Autowired PostRepository postRepository; @GetMapping("/posts/{id}") public String getPost(@PathVariable Long id) { Optional byId = postRepository.findById(id); Post post = byId.get(); return post.getTitle(); } } @RestController public class PostController { @GetMapping("/posts/{id}") public Post getPost(@PathVa..
-
스프링 데이터 Common - 2 (스프링 데이터 JPA - 5)Programming/Spring Data JPA 2021. 1. 1. 15:47
1. 커스텀 리포지토리 만들기 - 스프링 데이터 리포지토리 인터페이스에 기능을 추가하거나 기본 기능을 덮어쓸 수 있음 1) 커스텀 리포지토리 인터페이스 정의 public interface PostCustomRepository { List findMyPost(); void delete(T post); } 2) 인터페이스 구현 클래스 만들기 (기본 접미어는 Impl) public class PostCustomRepositoryImpl implements PostCustomRepository { @Autowired EntityManager entityManager; @Override public List findMyPost() { return entityManager.createQuery("SELECT p F..
-
스프링 데이터 Common - 1 (스프링 데이터 JPA - 4)Programming/Spring Data JPA 2021. 1. 1. 15:47
1. Repository - 기본적으로 제공하는 기능 테스트 @RunWith(SpringRunner.class) @DataJpaTest class PostRepositoryTest { public static final String STRING = "31"; @Autowired PostRepository postRepository; @Test @Rollback(false) public void curdRepository() { // Given Post post = new Post(); post.setTitle("Title1"); assertThat(post.getId()).isNull(); // When Post newPost = postRepository.save(post); // Then assert..
-
JPA 프로그래밍 - 2 (스프링 데이터 JPA - 3)Programming/Spring Data JPA 2021. 1. 1. 15:46
1. Entity 상태 - Transient : JPA가 모르는 상태 - Persistent : JPA가 관리중인 상태 (1차 캐시, Dirty Checking, Write Behind, ...) - save - Detached : JPA가 더이상 관리하지 않는 상태 - return 한 경우 - Removed : JPA가 관리하긴 하지만 삭제하기로 한 상태 save()를 호출한다고 바로 DB에 반영되는 것이 아님, JPA가 판단하여 DB에 반영 2. Cascade 엔티티의 상태 변화를 전파 시키는 옵션 Parent - Child 구조를 만들고 양방향 관계를 만듬 - Post.java cascade를 통해 상태 변화시 저장된 Comment에게 전파하겠다는 설정을 함 @Entity public class P..
-
JPA 프로그래밍 - 1 (스프링 데이터 JPA - 2)Programming/Spring Data JPA 2020. 4. 30. 19:03
1. 개요 (기본) - 의존성 추가 (spring data JPA와 관련된 빈들이 모두 등록됨) org.springframework.boot spring-boot-starter-data-jpa - application.properties 추가 spring.datasource.url=jdbc:postgresql://localhost:5432/springdata spring.datasource.username=hongchan spring.datasource.password=pass spring.jpa.hibernate.ddl-auto=create //update, validate // 개발할 때는 create, 이후에는 validate 사용을 권장! // update는 스키마 수정 시 지저분해질 수 있는 우..
-
관계형 데이터베이스와 ORM (스프링 데이터 JPA - 1)Programming/Spring Data JPA 2020. 4. 30. 18:26
1. JDBC - 관계형 데이터베이스와 자바의 연결 고리 - 기본적으로 자바 안에 들어있어서, 각 디비에 맞는 드라이버만 추가하면 됨 - 아래는 postgreSQL 드라이버를 의존성에 추가한 부분 org.postgresql postgresql 42.2.10 - 도커를 사용하여 디비 실행 (스프링 부트 포스팅 참고) - URL 정보, 인증 정보가 필요함 public class Application { public static void main(String[] args) throws SQLException { String url = "jdbc:postgresql://localhost:5432/springdata"; String username = "hongchan"; String password = "pas..
-
모델, 바인더, 예외 처리, 전역 컨트롤러 (스프링 MVC - 7)Programming/Spring MVC 2020. 3. 26. 21:21
1. @ModelAttribute - @Controller, @ControllerAdvice 를 사용한 클래스에서 모델 정보를 초기화 할 때 사용함 - @RequestMapping과 같이 사용하면 해당 메소드에서 리턴하는 객체를 모델에 넣어준다. (뷰는 요청 url로 찾음 - 리퀘스트 투 뷰 네임 트렌스레이터) @ModelAttribute public void categories(Model model) { model.addAttribute("categories", List.of("study", "hobby")) } @GetMapping("/events/model/test") @ModelAttribute public Event modelTest() { return new Event(); } 2. @Init..