Spring 17

영속성 컨텍스트, 엔티티의 생명주기

영속성 컨텍스트 > "엔티티를 영구 저장하는 환경" - J2SE 환경 기준 - EntityManager.persist(entity); DB에 저장한다는 의미가 아니라 entity를 영속성 컨텍스트에 저장한다는 의미 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다. EntityManager와 영속성 컨텍스트가 1:1 관계이다. 엔티티의 생명주기 1. 비영속 상태 > 멤버 객체를 생성만한 상태 2. 영속 상태 > 객체 생성후 엔티티 매니저를 통해 persist해서 객체를 영속 컨텍스트에 넣는다. 3. 준영속 상태 > detach , 영속 상태의 엔티티가 영속성 컨텍스트에서 분리 4. 삭제 상태 > DB에서 객체를 삭제 영속성 컨텍스트의 이점 !! 1. 1차 캐시 key : pk value : enti..

[애플리케이션 개발]persistence_entityManagerFactory, 엔티티 생성

JPA에는 persistence가 있다. persistence는 persistence.xml에서의 정보를 가지고 EntityManagerFactory를 만든다. EntityManagerFactory는 EntityManager를 만든다. EntityManagerFactory 는 딱 하나만 만들어야한다. 일관적인 단위를 하나 할 때는 EntityManager 이용 (고객의 요청이 올 때마다) EntityManager 는 쓰레드간 공유 X , 사용하면 버려야함 JPA를 사용하면 내부에서 JDBC API를 사용해 SQL를 호출하여 DB와 통신한다. 아래 어노테이션을 사용해 엔티티를 생성한다. https://what-am-i.tistory.com/357?category=1083625 @Entity, @Table,..

[spring][2022고대해커톤]SQL이 맞는데 안될때(ft. 여러개 조회 List)

시간이 급박한 해커톤에서 계~속 SQL이 분명이 맞는데 조회가 제대로 작동되지않았다. 그만하고 싶었지만 어쩔수없기에 계속 봤다. 그러다가 그냥 작은 것부터 돌려보자 싶어 select하는 필드중에 몇개만 골라 새로 res를 만들고 코드를 수정하기 시작했다. 예전에 작성해놓은 코드를 보며 갑자기 다른 점이 보였다. 그것은 바로 List였다. 여러개를 조회할 때는 List로 조회해야하는데 이걸 잊어버렸던 것이다!! 막상 생각이 떠오르니 과거에 이렇게 만들었었다는 것이 떠올랐다. 그래서 바로 @Getter @Setter @AllArgsConstructor public class GetReservationListRes { private List reservationList; } reservation의 List 형..

[spring]@Builder(생성자의 순서가 바뀐다면?), ObjectMapper(데이터를 json형태로 변경하는 법)

1. @Builder @Builder public PostCreate(String title, String content) { this.title = title; this.content = content; } 메서드에 builder어노테이션을 붙여준다. 작은 클래스라면 클래스 위에 붙여도 되지만 왠만하면 메서드 위에 붙이는 것이 좋다. 이것은 lombok의 어노테이션 중 하나이다. 이 어노테이션을 생성자에 붙이면 PostCreate request = PostCreate.builder() .title("제목입니다.") .content("내용입니다.") .build(); 이렇게 postCreate에 있는 변수에 각각 이름에 값을 넣어 build할 수 있다. 이로써 생성자에 순서가 변경이 되는 상황이 생겨도 ..

[spring] 양방향 연관관계&연관관계의 주인

객체는 참조로 연관된 객체를 찾고 테이블은 외래키로 조인을 통해 연관된 테이블을 찾는다. 양방향 연관관계 -> 팀과 멤버를 생각할 때 멤버를 보고 팀을 찾는 것과 팀을 보고 멤버를 찾는 두가지가 모두 되는 관계를 말한다. 객체 객체를 양방향으로 참조하려면 단방향 연관관계가 2개를 만들어야한다. 이것을 양방향 연관관계라고 이름 붙였다 팀 -> 멤버 멤버 -> 팀 테이블 테이블은 하나의 FK를 이용해 두 테이블이 연관관계를 관리한다. (양쪽으로 join가능) -> 연관관계가 1개 있다. 회원 팀 @OneToMany(mappedBy = "team") List members = new ArrayList(); 팀 입장에서 보면 Team이 1이고 Member가 N이므로 @OneToMany 어노테이션을 붙여준다. m..

[매핑 어노테이션]@Entity, @Table, @Enumerated, @Id, @GeneratedValue, @Temporal,@Lob

1. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 꼭 기본 생성자가 있어야한다. ( 파라미터X) 2. @Table 엔티티와 매핑할 테이블을 지정하는 어노테이션이다. 속성으로 name = "" 으로 매핑할 테이블 이름을 변경할 수 있다. 3. @Enumerated enum을 설정하고 싶을 때 사용한다. (EnumType.STRING)으로 설정해주어야 안전하다. ORDINAL도 있는데 (default)이는 순서를 DB에 저장하는 것으로 안전하지않다. 예시 ) @Enumerated(EnumType.STRING) private OrderStatus status; 4. @Id 해당 변수를 pk로 설정해준다. 5. @GeneratedValue 따로 값을 넣지 않아도 자동적으로 숫자가 ..

[2]스프링 빈과 의존관계 _ 컴포넌트 스캔, 자바코드로 직접 등록

스프링은 스프링 컨테이너에 스프링빈을 등록하여 사용한다. 기본적으로는 싱글톤 (하나의 클래스에 하나의 객체만을 등록한후 공유)으로 등록한다. 즉, 같은 스프링 빈이면 모두 같은 인스턴스인 것이다. 이 스프링빈을 등록하는 방법에는 2가지가 있다. 1. 컴포넌트 스캔 2. 자바 코드로 직접 스프링 빈 등록 정형화된 코드의 경우 컴포넌트 스캔방식을 주로 사용한다. 정형화 되어있지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 직접 스프링 빈으로 등록한다. 1. 컴포넌트 스캔 @Component 애노테이션이 있다면 스프링 빈으로 스프링 컨테이너에 객체로 자동 등록된다. @Component를 포함하는 @Controller, @Service, @Repository도 스프링 빈으로 자동 등록이된다. @Autowi..

[0]프로젝트 환경설정과 스프링 웹 개발 기초

1. 프로젝트 환경 설정 ctrl + alt + s를 통해서 Reference에 들어가 gradle을 검색하고 gradle에서 intellij로 설정을 변경해준다. spring은 굉장히 방대하다. 필요한 것을 찾는 능력이 중요하다. spring.io에 들어가 project -> springboot로 @Controller public class HelloController { @GetMapping("hello") public String hello(Model model){ model.addAttribute("data","hello!"); return "hello"; // templete/hello.html을 찾아 렌더링 하기 } } 스프링 부트는 톰캣이라는 웹서버가 내장되어있다. 컨트롤러에서 문자열을 리턴..

[0]프로젝트 생성과 컨트롤러_ lombok과 H2,MockMvc가 뭐야?

인프런의 호돌맨의 요절복통 개발쇼를 구매하였다. 유튜브에서 호돌맨을 자주봤었기도 하고 스프링을 빠르게 공부하고 싶었었기 때문이다. 이 강의를 통해 공부해야할 길을 찾을 수 있기를 바란다. 강의를 듣고 따라하는 것에서 끝내는 것이 아니라 강의는 그저 길을 터주는 것이라 생각하고 모르는 것이 생기면 조사하고 공부하여 습득하고 내 지식으로 만들 예정이다. 근데 너무 생소한 개념이 많아서 김영한님 강의로 도망쳤다...김영한님 강의 빨리 듣고 이거 들을게요.. 1. 프로젝트 생성 인텔리제이에서 스프링 부트 프로젝트를 만들었다. 이름은 Durumlog -! 아무것도 하지 않은 페이지는 역시나 Error Page가 떴다. 2. 컨트롤러 생성 컨트롤러를 생성한 후에 다음과 같이 test에서도 동일한 위치에 폴더를 만들..